Informationen zur Peerverteilung

Die Peerverteilungs-API, die das Branchcachefeature in Windows 7, Windows Server 2008 R2, Windows 8 und Windows Server 2012 unterstützt, bietet eine Reihe von Plattform-APIs, mit denen die Netzwerkschnelligkeit zentralisierter Anwendungen erhöht werden kann, wenn von Remotebüros aus darauf zugegriffen wird, und die allgemeine WAN-Auslastung (Wide Area Network) reduziert werden kann, ohne die Netzwerksicherheitstechnologien zu stören.

Das Peerverteilungssystem bietet eine Reihe von Plattform-APIs, die sowohl von den Herausgebern genutzt werden, die digitale Inhalte bereitstellen, als auch von Kunden, die sie anfordern. Um diese Rollen leicht unterscheiden zu können, ist es möglicherweise einfacher, sich den Herausgeber in einer Serverrolle und den Consumer in einer Clientrolle zu überlegen. Abgesehen davon ist es wichtig zu beachten, dass der Peerverteilungsdienst abgesehen von diesen konzeptionellen Rollen ein echtes Peersystem ist. Dies wird durch die Fähigkeit jedes Peerverteilungsknotens zum Veröffentlichen und Nutzen digitaler Inhalte angegeben. Die Peerverteilungsplattform-APIs werden Herausgebern und Kunden über 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 des Inhalts mit dem Begriff Inhaltsinformationen oder kurz Inhaltsinformationen zu erstellen. Diese Inhaltsinformationen können dann von einer Instanz des Peerverteilungsdiensts verwendet werden, um den Inhalt zu authentifizieren und neu zu erstellen. Wenn Inhalt von einer Anwendung im Peerverteilungsdienst veröffentlicht wird, der konzeptionell ein serverseitiger Vorgang ist, wird dieser Inhalt der Publisher-Identität zugeordnet, die auf der SID des Benutzers basiert, der dem Threadzugriffstoken zugeordnet ist. Diese Bindung wird durchgeführt, um den Zugriff auf Inhalte durch nicht autorisierte Entitäten zu beschränken. Beachten Sie jedoch, 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 zu erhalten.
Es gibt eine neue Version der Inhaltsinformationsdatenstruktur in Windows 8; die vorherige Version wird jedoch weiterhin unterstützt. Für die Zusammenarbeit mit Windows 7-Clients 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 zugriff auf die veröffentlichten Inhaltsinformationen bereitgestellt werden, die diesem Inhalt zugeordnet sind. Der Peerverteilungsdienst, der zum Veröffentlichen des Inhalts verwendet wird, kann die zugehörigen Inhaltsinformationen bereitstellen. Sobald der Consumer über die Inhaltsinformationen verfügt, können andere Peerverteilungs-APIs zum Anfordern von Inhalt vom Peerverteilungsdienst verwendet werden. 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 PeerDistServerUnpublish-Funktion bereitgestellt, damit Inhalte nicht veröffentlicht werden können. Nachdem der Inhalt nicht mehr veröffentlicht wurde, stellt der lokale Peerverteilungsdienst die diesem Inhalt zugeordneten Inhaltsinformationen nicht mehr zur Verfügung.

Asynchrone Vervollständigungen

Die Peerverteilungs-API unterstützt ein asynchrones API-Modell, und daher ermöglichen Peerverteilungs-APIs die Verwendung von E/A-Abschlussports oder Ereignissen als Signalisierungsmechanismen für die Verarbeitung von asynchronen Peerverteilungsvorgängen. 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 wieder verwendet werden, wenn die aufrufende Anwendung dies für geeignet hält.

Es gibt keine asynchrone Vervollständigung, 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 den asynchronen Abschluss warten.

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

Auf E/A-Abschlussport basierende Vervollständigung

Der Benutzer ruft den E/A-Vervollständigungsportmechanismus auf, indem er den folgenden API-Funktionen ein Abschlussporthand handle und einen Vervollständigungsschlüssel zur Verfügung stellt:

PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent

Der Benutzer erstellt einen Vervollständigungsport, indem er CreateIoCompletionPort aufruft. Dieses Abschlussporthand handle 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-Funktion FALSE 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-Funktion TRUE zurückgibt.

Weitere Informationen finden Sie unter E/A-Abschlussports.

Ereignisbasierter Abschluss

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

Ein Threadaufrufer kann überlappende Vorgänge verwalten, indem er ein Handle für das Ereignisobjekt der OVERLAPPED-Struktur mit manueller Zurücksetzung in einer der Wartefunktionen an gibt. Nachdem das Ereignis signalisiert wurde, muss der Aufrufer PeerGetOverlappedResult aufrufen und dabei die entsprechende OVERLAPPED-Struktur übergeben. 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-Funktion TRUE zurückgibt.

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

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

Referenz zur Peerverteilungs-API