Peerkanal – Sicherer Chat
Dieses Beispiel zeigt die Verwendung der NetPeerTcpBinding-Bindung mit kennwortbasierter Authentifizierung, die Mehrparteienkommunikation mithilfe von Peerkanal bietet. Dieses Beispiel ist eine Variante des Beispiel 'Erste Schritte'. Unter Beispiel 'Erste Schritte' finden Sie eine Übersicht über Windows Communication Foundation (WCF).
In diesem Beispiel sind die Anwendungsinstanzen selbst gehostete Konsolenanwendungen.
Anders als bei den anderen Transportbindungsbeispielen wird in diesem Beispiel die IChat
-Vertragsschnittstelle verwendet, um Mehrparteienkommunikation zu veranschaulichen. Alle Instanzen implementieren diesen Vertrag, um Nachrichten zu empfangen, und erstellen Proxys mit demselben Vertrag, um Nachrichten zum Mesh zu senden. Dies wird durch Erstellen eines DuplexChannel zum Mesh veranschaulicht.
Tipp
Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Der Bindungskonfigurationsprozess im Beispiel beinhaltet die folgenden Peerkanal-Begriffe:
- Der Peerresolver ist zum Auflösen einer Mesh-ID in die Endpunktadressen einiger Knoten im Mesh verantwortlich.
- Ein Mesh ist eine benannte Auflistung von Peerknoten, die durch die Mesh-ID gekennzeichnet wird.
- Ein Peerknoten ist eine Instanz einer Anwendung, die am Mesh beteiligt ist.
- Mesh-IDs identifizieren den Hostteil der Adresse eines Endpunkts im Mesh. Beispiele für solche Adressen sind "net.p2p://chatMesh/servicemodelsamples/chat" oder "net.p2p://broadcastMesh/servicemodelsamples/announcements". "chatMesh" und "broadcastMesh" sind die Mesh-IDs.
- Alle an einem Mesh beteiligten Clients verwenden dieselbe Mesh-ID, können aber u. U. andere Pfade und Dienste verwenden. Eine an eine bestimmte Endpunktadresse adressierte Nachricht wird an alle Peerkanäle übermittelt, die diese Adresse verwenden.
Wenn ein Peerknoten (durch Öffnen des Peerkanals) geöffnet wird, verwendet er einen Peerresolver, um die Mesh-ID in die Adressen anderer Peerknoten aufzulösen, zu denen eine Verbindung hergestellt werden soll. Dadurch entsteht ein Netz von miteinander verbundenen Knoten, in dem Nachrichten weitergegeben werden können.
PeerTransportCredentialType gibt an, wie Peers im Mesh gegenseitig authentifiziert werden. Diese Eigenschaft kann entweder in den Bindungsinformationen, im NetPeerTcpBinding-Objekt oder mithilfe des PeerTransportBindingElements angegeben werden. Je nach der Verwendung muss der Verhaltensauflistung in der Kanalfactory oder dem ServiceHost eine ClientCredentialSettings-Instanz (oder ServiceCredentialSettings-Instanz) mit entsprechenden, in der Peer-Eigenschaft angegebenen Anmeldeinformationen hinzugefügt werden.
- In diesem Beispiel wird der Kennwortauthentifizierungsmodus für das Sichern von Peerkanal (nicht der Standardmodus) verwendet. Dies wird realisiert, indem zwischen Nachbarn eine sichere Verbindung hergestellt und eine Transformation dieses Kennworts ausgetauscht wird. Wenn Password angegeben ist, muss die ClientCredentialSettings.Peer-Eigenschaft ein gültiges Kennwort und optional eine X509Certificate2-Instanz (mithilfe von SetSelfCertificate) enthalten.
Die Bindung wird in der Konfigurationsdatei der Anwendung angegeben. Der Bindungstyp wird im Binding-Attribut des Endpunktelements angegeben (siehe folgendes Beispiel).
<client>
<!-- chat instance participating in the mesh -->
<endpoint name="SecureChatEndpoint"
address="net.p2p://SecureChatMesh/servicemodelsamples/chat"
binding="netPeerTcpBinding"
bindingConfiguration="SecureChatBinding"
contract="Microsoft.ServiceModel.Samples.IChat">
</endpoint>
</client>
Wenn Sie die NetPeerTcpBinding-Bindung mit dem Standardverhalten verwenden, ist kennwortbasierte Sicherheit aktiviert. Das Bindungselement enthält Attribute zum Festlegen des Anschlusses, der zu überwachenden IP-Adresse, des Resolvertyps, der maximalen Größe von Nachrichten, der maximalen Größe des Pufferpools, von Readerkontingenten, des Peerknoten-Authentifizierungsmodus, von Nachrichtenauthentifizierung und von Timeoutwerten (für Schließ-, Öffnungs-, Sende- und Empfangsvorgänge).
Hinweis: In diesem Beispiel wird der Standardpeerresolver (PNRP), der in Windows Server 2003 nicht verfügbar ist, verwendet. Um dieses Beispiel unter Windows Server 2003 auszuführen, muss daher ein benutzerdefinierter Peerresolver verwendet werden. Ein Beispiel, in dem ein benutzerdefinierter Peerresolver verwendet wird, finden Sie unter Peerkanalchat, zum Beispiel:
<netPeerTcpBinding>
<binding configurationName="Binding1">
<resolver mode="Custom">
<customResolver
type="MyAppNameSpace.MyCustomPeerResolver, myApp"/>
</resolver>
</binding>
</netPeerTcpBinding>
Die Datei, die MyCustomPeerResolver
enthält, muss mit der Anwendung kompiliert werden. Falls dieses Beispiel auf mehreren Computern mit unterschiedlichen Plattformen ausgeführt wird, beachten Sie, dass alle denselben Resolver verwenden müssen.
Diese Chatimplementierung zeigt auch, wie der Peerknoten abgerufen wird, der der Empfänger- oder Senderinstanz zugeordnet ist, und wie die Registrierung für dessen Online- und Offlineereignisse erfolgt. Ein Onlineereignis wird ausgelöst, wenn der Peerknoten mit mindestens einem anderen im Netz befindlichen Peerknoten verbunden wird. Ein Offlineereignis wird ausgelöst, wenn der Peerknoten mit keinem anderen im Netz befindlichen Peerknoten mehr verbunden ist.
Zu diesem Zeitpunkt ist der Peerkanal nicht in das Service Model Metadata Utility Tool (Svcutil.exe) integriert. Daher kann Svcutil.exe nicht genutzt werden, um einen typisierten Kanal für den Sender zu generieren.
Beim Ausführen des Beispiels fordert der Client die Angabe eines Spitznamens und eines Kennworts und zeigt anschließend in einer Meldung an, dass Nachrichten gesendet werden können. Chatnachrichten werden in den anderen Clientkonsolenfenstern angezeigt. Drücken Sie zum Beenden des Clients die Q-Taste und anschließend die EINGABETASTE in den Konsolenfenstern eines Clients.
Wenn Sie Ablaufverfolgung oder Nachrichtenprotokollierung aktivieren, können Sie die Sender- und Empfängeraktivität auf einer tieferen Ebene überwachen. Im Prozedurenabschnitt wird das Aktivieren von Ablaufverfolgung und Nachrichtenprotokollierung beschrieben.
Tipp
Beachten Sie dabei unbedingt, dass derzeit nicht alle möglichen Ausnahmen, die die Infrastruktur u. U. auslöst, vom Beispiel verarbeitet werden. Wenn Sie diese Beispiele in einer kommerziellen Umgebung oder einer Produktionsumgebung verwenden, verwenden Sie die bewährten Methoden zur korrekten Ausnahmebehandlung.
So richten Sie das Beispiel ein, erstellen es und führen es aus
Stellen Sie sicher, dass Sie Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Version der Lösung befolgen Sie die in Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer ausführen möchten, befolgen Sie die in Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
So installieren Sie PNRP unter Windows XP SP2 (einmaliges Setup):
- Doppelklicken Sie in der Systemsteuerung auf Software.
- Klicken Sie im Dialogfeld Software auf Windows-Komponenten hinzufügen/entfernen.
- Aktivieren Sie im Assistent für Windows-Komponenten das Kontrollkästchen "Netzwerkdienste", und klicken Sie auf "Details".
- Aktivieren Sie das Kontrollkästchen "Peer-zu-Peer", und klicken Sie auf "OK".
- Klicken Sie im Dialogfeld Assistent für Windows-Komponenten auf "Weiter".
- Klicken Sie auf "Fertig stellen", wenn die Installation abgeschlossen ist.
- Starten Sie den PNRP-Dienst in einer Eingabeaufforderung mit dem folgenden Befehl: net start pnrpsvc.
Starten Sie mehrere Instanzen des Beispiels, und geben Sie dabei jedes Mal einen Spitznamen und ein Kennwort ein. Für die verschiedenen Instanzen sollte jeweils ein anderer Spitzname für den Client verwendet werden, wohingegen das Kennwort überall beibehalten werden sollte. Chatnachrichten, die von einer Instanz der Anwendung gesendet werden, werden von allen anderen Instanzen empfangen, vorausgesetzt, dass sich die Spitznamen unterscheiden und das Kennwort übereinstimmt. Mehrere Clients mit demselben Spitznamen sind zulässig, doch Nachrichten von Clients mit demselben Spitznamen werden nicht angezeigt.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.