WS-Enumeration
# WS-Enumeration

WS-Enumeration (englisch enumeration ‚Aufzählung‘) ist ein im Jahr 2006 vorgelegter Vorschlag aus der Gruppe der WS-*-Spezifikationen. Seit April 2011 hat diese "Member Submission" (Vorschläge von Mitgliedern) den Status "Candidate Recommendation" (möglicher künftiger Standard). Die WS-*-Spezifikationen sind industrielle Standards des World Wide Web Consortium (W3C).

Das Ziel der Spezifikation ist es, die blockweise Übertragung größerer Datenmengen zu standardisieren. Hierbei geht es allerdings um jegliche Art von aufzählbaren Daten wie die Datenzeilen einer Datenbankabfrage oder die Elemente einer Queue. Dabei ist es nicht erforderlich, dass die gesamte Datenmenge sofort am Stück übertragen wird. Durch die blockweise Übertragung der Daten kann der Sender die Aufbereitung der nächsten Daten durchführen, während der Empfänger die zuletzt gesendeten Daten verarbeitet. Durch diese überschneidende Aufbereitung bzw. Verarbeitung der Daten kann eine höhere Geschwindigkeit erzielt werden, als wenn die Daten auf einmal übertragen würden.

## Funktionsweise

Eine Datenübertragung zwischen Datensenke (Empfänger) und Datenquelle läuft dabei typischerweise wie folgt ab:

* Die Datensenke stellt eine Anfrage an die Datenquelle (Enumerate).
* Die Datenquelle schickt eine Antwort zurück (EnumerateResponse). Diese enthält auch den sogenannten Aufzählungskontext (EnumerationContext).
* Basierend auf dem Aufzählungskontext schickt die Datensenke nun ein oder mehrere Anfragen (Pull) an die Quelle.
* Die Datenquelle antwortet auf jeden Pull-Anfrage mit einer PullResponse. Im Element Item sind dabei die eigentlichen Daten enthalten, deren Aufbau und Format anwendungsspezifisch ist. Ist in dieser PullResponse das Element EndofSequence enthalten, sind damit alle Daten übertragen und keine weiteren Pull-Anfragen zu dieser Aufzählung mehr nötig.

Es existieren weiterer Protokollelemente, beispielsweise für eine Statusabfrage und den vorzeitigen Abbruch der Datenübertragung.

## Besonderheiten und Beschränkungen

WS-Enumeration legt nicht fest, ob der Aufzählungskontext (EnumerationContext) von der Datenquelle oder dem Empfänger gespeichert wird. Zudem ist es möglich, die Verantwortung für die Speicherung bei jeder Anfrage zu wechseln.

Weiterhin wird durch WS-Enumeration nicht festgelegt,

* ob die Daten vollständig zu übertragen sind,
* in welcher Reihenfolge die Daten übertragen werden und
* ob bei jeder Anfrage die gleichen Daten zurückgegeben werden.

Alle diese Punkte sind anwendungsspezifisch.

## Einordnung im Kontext von WS-*

WS-Enumeration baut auf WS-Addressing auf, das Format der ausgetauschten Nachrichten (Messages) und die Definition der Endpoints entspricht dieser Spezifikation. Dadurch wird es auch möglich, dass die Daten über einen längeren Zeitraum hinweg übertragen werden. Aus Sicherheitsgründen wird des Weiteren die Nutzung von WS-Security (Verschlüsselung und Signierung) empfohlen. Um zusätzlich bestimmte Arten von Attacken zu vermeiden, legt die Spezifikation außerdem nahe, WS-SecureConversation und WS-SecurityPolicy zu nutzen. Dadurch wird dann auch WS-Policy für alle Teilnehmer verpflichtend.

