Color scheme: Dark
You are here: start » en » Documentation » Data integration and data access » WKL Database Gateway » .NET client Wkl.Data.Gateway.Client—overview » Reference » Limits and properties (reference)

Limits and properties (reference)

Limits

  • Database names aren't visible to the caller. The caller names an approved alias; resolution happens in the service.
  • Filter in the service, not in the client. Selection, filter, sorting, and paging belong in the query. The service returns at most one window per request, up to its maximum; loading a whole table to filter it in the client takes as many requests as the table has windows and transfers every row you then discard.
  • No retry. A timeout during a call doesn't mean that nothing was written—the client stopped waiting, the transaction didn't stop running. This applies to TimedOut and equally to Unavailable when the connection broke during the call or the client gave up after WriteTimeout. An automatic second attempt would repeat a transaction that may have been committed. The data service does support the Idempotency-Key header, which lets a retry receive the stored first response; the client doesn't send it. The reason: the service keeps these responses for only ten minutes and only in memory. After a restart of the service or a longer pause, the retry would run a second time after all, and the caller couldn't tell. Whether and how to retry is therefore up to the application, which knows whether its call may run twice.
  • Truncated procedure results. If a procedure returns more rows than the service's row limit for its alias allows (MaxRows), the service truncates the result. The client writes a warning with the correlation ID to the application's log; GatewayRoutineResult carries no flag for it. A procedure that returns large amounts of data therefore belongs in a function or view that's read window by window. Reads aren't truncated, because the service never forms a window larger than the limit.
  • A membership test (Membership) is sent as a chain of equalities, because the wire format has no set operator. The result is the same. If this makes the address longer than MaxUrlLength, the read request travels with its options in the body, and the service passes a long chain on one column to the database as a single parameter. How many values a membership test may carry is set by the contract package (GatewayFilter.Membership.MaxValues); how large the body may be is set by the service.
  • Values for which there's no agreed wire format—enumerations, byte arrays, business objects—are rejected instead of being converted with ToString() into a string that looks plausible and matches nothing.

Two properties that may surprise you

The total count can be missing. GatewayPage.TotalCount is null if nobody counted. That isn't the same as 0. If you simplify the distinction to a zero, you tell a list that there's nothing to load—over data that demonstrably exists and without an error message anywhere. If you didn't request a count, control further loading through HasMorePotentially: a full window can have a continuation, a short one is the end.

An exact amount travels as text. SQL Server ranks float above decimal (Microsoft: Data type precedence): a floating-point parameter against a decimal column causes the column to be converted, which costs the index and can change the last digit. Text ranks below every numeric type, so the parameter is converted—into exactly the type of the column. Integers within the range of long remain numbers, because there the conversion would be the expensive one; a larger ulong travels as text.

en/wiki/data-conectivity/database-gateway/client/reference/limits.txt · Last modified: by Wolfgang van der Stille