Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL Database Gateway » .NET-Client Wkl.Data.Gateway.Client – Überblick » Referenz » Grenzen und Eigenschaften (Referenz)

Grenzen und Eigenschaften (Referenz)

Grenzen

  • Datenbanknamen sind für den Aufrufer nicht sichtbar. Er nennt einen freigegebenen Aliasnamen; die Auflösung geschieht im Dienst.
  • Im Dienst filtern, nicht im Client. Auswahl, Filter, Sortierung und Seitenbildung gehören in die Abfrage. Der Dienst liefert je Anfrage höchstens ein Fenster bis zu seiner Obergrenze; wer eine ganze Tabelle lädt, um im Client zu filtern, braucht so viele Anfragen, wie die Tabelle Fenster hat, und überträgt jede Zeile, die er danach verwirft.
  • Keine Wiederholung. Eine Zeitüberschreitung beim Aufrufen heißt nicht, dass nichts geschrieben wurde – der Client hat aufgehört zu warten, die Transaktion hat nicht aufgehört zu laufen. Das gilt für TimedOut und ebenso für Unavailable, wenn die Verbindung während des Aufrufs abbrach oder der Client nach WriteTimeout aufgab. Ein automatischer zweiter Versuch würde eine womöglich bestätigte Transaktion wiederholen. Der Datendienst kennt zwar die Kopfzeile Idempotency-Key, mit der eine Wiederholung die gespeicherte erste Antwort erhält; der Client sendet sie nicht. Der Grund: Der Dienst hält diese Antworten nur zehn Minuten und nur im Arbeitsspeicher. Nach einem Neustart des Dienstes oder einer längeren Pause würde die Wiederholung doch ein zweites Mal ausgeführt, und der Aufrufer könnte das nicht erkennen. Ob und wie wiederholt wird, entscheidet deshalb die Anwendung, die weiß, ob ihr Aufruf zweimal laufen darf.
  • Gekürzte Ergebnisse einer Prozedur. Liefert eine Prozedur mehr Zeilen, als die Zeilenobergrenze des Dienstes für ihren Alias erlaubt (MaxRows), kürzt der Dienst das Ergebnis. Der Client schreibt dazu eine Warnung mit der Korrelationskennung in das Protokoll der Anwendung; GatewayRoutineResult trägt kein Kennzeichen dafür. Eine Prozedur, die große Mengen liefert, gehört deshalb in eine Funktion oder Sicht, die fensterweise gelesen wird. Beim Lesen tritt die Kürzung nicht auf, weil der Dienst kein Fenster größer als die Obergrenze bildet.
  • Eine Mengenprüfung (Membership) wird als Kette von Gleichheiten übertragen, weil die Übertragungssyntax keinen Mengenoperator kennt. Das Ergebnis ist dasselbe. Wird die Adresse dadurch länger als MaxUrlLength, reist die Leseanfrage mit ihren Optionen im Rumpf, und der Dienst gibt eine lange Kette auf einer Spalte als einen einzigen Parameter an die Datenbank. Wie viele Werte eine Mengenprüfung tragen darf, legt das Vertragspaket fest (GatewayFilter.Membership.MaxValues); wie groß der Rumpf sein darf, der Dienst.
  • Werte, für die es keine vereinbarte Übertragungsform gibt – Aufzählungen, Bytefolgen, Fachobjekte – werden abgewiesen statt mit ToString() in eine Zeichenkette überführt, die plausibel aussieht und nichts trifft.

Zwei Eigenschaften, die überraschen können

Die Gesamtzahl darf fehlen. GatewayPage.TotalCount ist null, wenn niemand gezählt hat. Das ist nicht dasselbe wie 0. Wer die Unterscheidung zu einer Null vereinfacht, sagt einer Liste, es gebe nichts zu laden – über nachweislich vorhandenen Daten und ohne Fehlermeldung an irgendeiner Stelle. Wer keine Zählung angefordert hat, steuert das Nachladen über HasMorePotentially: ein volles Fenster kann eine Fortsetzung haben, ein kurzes ist das Ende.

Ein genauer Betrag reist als Text. SQL Server stellt float über decimal (Microsoft: Data type precedence): ein Gleitkommaparameter gegen eine Dezimalspalte lässt die Spalte umwandeln, was den Index kostet und die letzte Stelle verändern kann. Text steht unter jedem Zahlentyp, also wird der Parameter umgewandelt – in genau den Typ der Spalte. Ganze Zahlen bis zum Bereich von long bleiben Zahlen, weil dort die Umwandlung die teure wäre; ein größerer ulong reist als Text.

Verwandte Themen

de/wiki/data-conectivity/database-gateway/client/reference/limits.txt · Zuletzt geändert: von Wolfgang van der Stille