Informationen zur Peerverteilung

Die Peerverteilungs-API, die das BranchCache-Feature in Windows 7, Windows Server 2008 R2, Windows 8 und Windows Server 2012 unterstützt, bietet eine Reihe von Plattform-APIs, die die Reaktionsfähigkeit zentralisierter Anwendungen erhöhen können, wenn von Remotestellen auf sie zugegriffen wird, und bei der Reduzierung der WAN-Auslastung (Wide Area Network) ohne Eingriff in die Netzwerksicherheitstechnologien unterstützt werden.

Das Peerverteilungssystem bietet eine Reihe von Plattform-APIs, die sowohl von den Herausgebern, die digitale Inhalte bereitstellen, als auch von Consumern verwendet werden, die sie anfordern. Um diese Rollen leicht zu unterscheiden, kann es einfacher sein, sich den Herausgeber in einer Serverrolle und den Consumer in einer Clientrolle zu überlegen. Abgesehen davon ist es wichtig, sich daran zu erinnern, dass der Peerverteilungsdienst neben diesen konzeptionellen Rollen ein echtes Peersystem ist, wie die Fähigkeit jedes Peerverteilungsknotens zeigt, digitale Inhalte sowohl zu veröffentlichen als auch zu nutzen. Die APIs der Peerverteilungsplattform werden Herausgebern und Consumern durch eine Win32-Importbibliothek (PeerDist.Lib) verfügbar gemacht.

Der Lebenszyklus von Inhalten, die von einem Herausgeber bereitgestellt und von einem Consumer mit dem Peerverteilungsdienst abgerufen werden, besteht aus den folgenden Vorgängen:

BESCHREIBUNG
Inhaltsveröffentlichung Die Veröffentlichung erfolgt, um eine Beschreibung von Inhalten zu erstellen, die als Inhaltsinformationen oder kurz Inhaltsinformationen bezeichnet werden. Diese Inhaltsinformationen können dann von einem instance des Peerverteilungsdiensts verwendet werden, um den Inhalt zu authentifizieren und neu zu erstellen. Wenn Inhalte von einer Anwendung im Peerverteilungsdienst veröffentlicht werden, der konzeptionell ein serverseitiger Vorgang ist, wird dieser Inhalt der Verlegeridentität zugeordnet, die auf der SID des Benutzers basiert, der dem Threadzugriffstoken zugeordnet ist. Diese Bindung erfolgt, um den Zugriff auf Inhalte durch nicht autorisierte Entitäten zu beschränken. Es ist jedoch wichtig zu beachten, dass der Zugriff auf die Inhaltsinformationen dem Zugriff auf den Inhalt selbst entspricht, da die Inhaltsinformationen verwendet werden können, um den Inhalt von Peers oder einem gehosteten Cache abzurufen.
Es gibt eine neue Version der Inhaltsinformationsdatenstruktur in Windows 8. Die vorherige Version wird jedoch weiterhin unterstützt. Um mit Windows 7-Clients zu arbeiten, kann ein Administrator den Peerverteilungsdienst so konfigurieren, dass er die vorherige Version der Inhaltsinformationsdatenstruktur verwendet.
Inhaltsabruf Damit ein Consumer Inhalte aus dem Peerverteilungsdienst abrufen kann, muss der Zugriff auf die veröffentlichten Inhaltsinformationen gewährt werden, die diesem Inhalt zugeordnet sind. Der Peerverteilungsdienst, der zum Veröffentlichen des Inhalts verwendet wird, kann die zugeordneten Inhaltsinformationen bereitstellen. Sobald der Consumer über die Inhaltsinformationen verfügt, können andere Peerverteilungs-APIs verwendet werden, um Inhalte vom Peerverteilungsdienst anzufordern. Der Peerverteilungsdienst versucht, den Inhalt aus dem lokalen Netzwerk abzurufen. Wenn der Inhalt nicht verfügbar ist, ist die Clientanwendung für das Abrufen des Inhalts vom Quellserver verantwortlich.
Entfernen der Veröffentlichung Für Anwendungen, die Inhalte im Peerverteilungsdienst veröffentlicht haben, wurde die Funktion PeerDistServerUnpublish bereitgestellt, um das Aufheben der Veröffentlichung von Inhalten zu ermöglichen. Sobald der Inhalt nicht veröffentlicht wurde, stellt der lokale Peerverteilungsdienst die diesem Inhalt zugeordneten Inhaltsinformationen nicht mehr bereit.

Asynchrone Vervollständigungen

Die Peerverteilungs-API unterstützt ein asynchrones API-Modell, sodass Peerverteilungs-APIs die Verwendung von E/A-Vervollständigungsports oder Ereignissen als Signalmechanismen für die Verarbeitung asynchroner Peerverteilungsvorgänge ermöglichen. Für beide Mechanismen verwendet die Peerverteilung eine OVERLAPPED-Struktur . Im Allgemeinen übernimmt die Peerverteilung den Besitz einer OVERLAPPED-Struktur und aller out-Parameter, die der Client an asynchrone API-Funktionen übergibt. Der Client darf erst auf diese Ressourcen zugreifen, wenn die bestimmte asynchrone Funktion abgeschlossen ist. Sobald die asynchronen Funktionen abgeschlossen sind, benötigt der Peerverteilungsdienst keinen Zugriff mehr auf diese Ressourcen und kann wiederverwendet werden, wenn die aufrufende Anwendung dies für richtig erachtet.

Es wird keine asynchrone Vervollständigung durchgeführt, wenn die Funktion einen anderen Fehlercode als ERROR_IO_PENDING zurückgibt. Die Rückgabe eines anderen Werts als ERROR_IO_PENDING bedeutet, dass der Aufruf synchron fehlgeschlagen ist. Wenn die Peerverteilungs-API ERROR_IO_PENDING zurückgibt, muss der Aufrufer auf die asynchrone Vervollständigung warten.

Der Fehlercode der asynchronen Vervollständigung kann auf zwei Arten abgerufen werden:

E/A-Abschlussportbasierte Vervollständigung

Der Benutzer ruft den E/A-Vervollständigungsportmechanismus auf, indem er einen Vervollständigungsporthandle und einen Vervollständigungsschlüssel für die folgenden API-Funktionen bereitstellt:

PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent

Der Benutzer erstellt einen Vervollständigungsport, indem Er CreateIoCompletionPort aufruft. Dieses Vervollständigungsporthandle kann gleichzeitig für andere asynchrone E/A-Vorgänge sowie peerverteilungsspezifische Vorgänge verwendet werden.

Der Aufrufer sollte die GetQueuedCompletionStatus-Funktion verwenden, um die asynchrone Vervollständigung zu verwalten. Wenn der asynchrone Vorgang fehlschlägt, gibt die GetQueuedCompletionStatus-FunktionFALSE zurück, und GetLastError gibt den entsprechenden Fehlercode zurück. Der Aufrufer sollte alle Felder der OVERLAPPED-Struktur ignorieren, wenn der Fehlercode etwas anderes als ERROR_SUCCESS ist. Der asynchrone Vorgang ist erfolgreich, wenn die GetQueuedCompletionStatus-FunktionTRUE zurückgibt.

Weitere Informationen finden Sie unter E/A-Vervollständigungsports.

Ereignisbasierte Vervollständigung

Wenn der Aufrufer ein gültiges Ereignishandle auf das Feld hEvent der OVERLAPPED-Struktur festlegt, wird es von der Peerverteilung verwendet, um zu signalisieren, dass der zugehörige asynchrone E/A-Vorgang abgeschlossen wurde.

Ein Threadaufrufer kann überlappende Vorgänge verwalten, indem er ein Handle für das Ereignisobjekt des manuellen Zurücksetzens der OVERLAPPED-Struktur in einer der Wartefunktionen angibt. Nachdem das Ereignis signalisiert wurde, muss der Aufrufer peerGetOverlappedResult passing in der entsprechenden OVERLAPPED-Struktur aufrufen. PeerGetOverlappedResult gibt FALSE zurück, und der Aufrufer muss GetLastError aufrufen, um den Fehlercode abzurufen. Der Aufrufer sollte alle Felder der OVERLAPPED-Struktur ignorieren, wenn der Fehlercode etwas anderes als ERROR_SUCCESS ist. Der asynchrone Vorgang ist erfolgreich, wenn die PeerGetOverlappedResult-FunktionTRUE zurückgibt.

Wenn der Aufrufer einen Abschlussport zusammen mit einem Ereignis bereitstellt, wird das Ereignis als Vervollständigungsmechanismus verwendet.

Windows 7: Verwenden Sie die GetOverlappedResult-Funktion anstelle von PeerGetOverlappedResult.

Peerverteilungs-API-Referenz