Share via


Conversation WCF, exemple

Mise à jour : novembre 2007

L'exemple de conversation explique comment implémenter une application de conversation entre plusieurs personnes à l'aide de PeerChannel. Les messages envoyés par toute instance d'une application de conversation sont reçus par toutes les autres instances.

Pour obtenir des exemples et leurs instructions d'installation

  • Effectuez une ou plusieurs des opérations suivantes :

    • Dans le menu ? (Aide), cliquez sur Exemples.

      Le fichier Readme contient des informations sur les exemples.

    • Accédez au site Web Exemples Visual Studio 2008. La version la plus récente des exemples est disponible sur ce site.

    • Recherchez les exemples sur l'ordinateur sur lequel Visual Studio est installé. Par défaut, les exemples et un fichier Readme sont installés sous lecteur:\Program Files\Microsoft Visual Studio 9.0\Samples\1036. Pour les versions Express de Visual Studio, tous les exemples sont disponibles en ligne.

Pour plus d'informations, consultez Recherche des fichiers d'exemple.

.

Note de sécurité :

Cet exemple de code est destiné à illustrer un concept ; il présente uniquement le code qui se rapporte spécifiquement à ce concept. Il est possible qu'il ne réponde pas aux exigences de sécurité d'un environnement spécifique, et ne doit pas être utilisé exactement comme indiqué. Nous vous recommandons d'ajouter du code de sécurité et de gestion des erreurs afin de renforcer la sécurité et la fiabilité de vos projets. Microsoft fournit cet exemple de code « EN L'ÉTAT » sans aucune garantie.

Pour exécuter l'exemple

  1. Dans l'Explorateur de solutions, ouvrez le fichier .sln.

    Chaque fois qu'une étape fait référence à un client ou un service, cette étape s'applique pour séparer des instances de l'exemple (parce que l'exemple de conversation n'est pas une application de client et service).

  2. Appuyez sur F5 pour exécuter l'application Conversation.

  3. Démarrez autant d'instances (instance nommée et située dans chemin d'installation de Visual Basic\Projects\Chat\Instance\Bin\Debug\Instance.exe) que vous le souhaitez. Démarrez en entrant un pseudonyme qui distinguera les messages envoyés par une instance cliente particulière. Peu après avoir entré ce nom, les messages de conversation peuvent être envoyés au maillage. Ces messages doivent être envoyés à toutes les autres instances qui ont un nom de membre distinct. (Autrement dit, un message d'un client qui a le même nom ne sera pas affiché, et le propre message d'un client unique ne sera pas envoyé à la fenêtre de console de ce client.)

Démonstrations

L'exemple de conversation n'est pas une application de client et service. Il s'agit d'une véritable application réseau d'égal à égal dans laquelle chaque instance agit comme un homologue d'autres instances. Chaque instance peut envoyer des messages à d'autres instances et recevoir des messages d'autres instances en utilisant le contrat duplex d'IChat.

Concepts clés

PeerChannel est une technologie de communication égal à égal (Peer-to-Peer, P2P) entre plusieurs parties de Windows Communication Foundation (WCF). Il aide à activer une messagerie sécurisée, évolutive et fiable. Une application collaborative, comme la conversation, est un exemple commun d'application à plusieurs parties pouvant bénéficier de PeerChannel. Dans la conversation, un groupe de personnes communiquent les unes avec les autres d'égal à égal sans serveurs. PeerChannel active la collaboration P2P, la distribution de contenu, l'équilibrage de charge et le traitement distribué pour les scénarios consommateur et entreprise.

PeerChannel introduit les nouveaux concepts suivants :

  • Un maillage est une collection nommée (un graphique interconnecté) de nœuds homologues qui peuvent communiquer entre eux et qui sont tous identifiés par un ID de maillage unique.

    Remarque :

    Les nœuds actifs du maillage publient leur nom de maillage pour permettre aux autres de les identifier. Un maillage s'ajuste à la modification de l'appartenance, dispose d'une connectivité adaptable dans un environnement où des nœuds joignent et quittent constamment maillage, et est optimisé dynamiquement selon les modèles de trafic.

  • Les nœuds actifs du maillage publient leur nom de maillage pour permettre aux autres de les identifier. Un maillage s'ajuste à la modification de l'appartenance, dispose d'une connectivité adaptable dans un environnement où des nœuds joignent et quittent constamment le maillage, et est optimisé dynamiquement selon modèles de trafic.

  • Un nœud égal à égal est un point de terminaison dans un maillage. Une simple application peut avoir plusieurs nœuds homologues qui participent à différents maillages.

  • Un programme de résolution d'égal à égal est chargé de résoudre un ID de maillage aux adresses de point de terminaison du maillage. Un nœud égal à égal utilise ces adresses pour se connecter à d'autres nœuds du maillage. Les messages peuvent ainsi être propagés dans l'ensemble du maillage.

La Conversation est une application Windows Forms. Chaque instance d'une application de conversation crée un IDuplexChannel ayant la même adresse de point de terminaison. Comme toutes les instances d'une application de conversation utilisent la même adresse, un message envoyé par une instance de l'application est reçu par toutes les autres instances sur leur canal égal à égal.

L'application Conversation définit et implémente le contrat duplex d'IChat. Le contrat IChat tient compte d'uniquement opérations unidirectionnelles parce que le ServiceModel ne prend pas en charge le paradigme une requête/plusieurs réponses. (Dans un canal à plusieurs parties, une requête unique envoyée au maillage peut générer plusieurs réponses.)

Cet exemple implémente une fonction Main statique pour créer un IClientChannel avec le contrat duplex d'IChat. La fonction utilise le point de terminaison spécifié dans le fichier de configuration.

Toutes les instances de conversation doivent utiliser la même adresse de point de terminaison pour garantir que les messages envoyés par une instance sont reçus par toutes les autres instances.

Les instances de conversation dans cet exemple se localisent entre elles en utilisant un programme de résolution personnalisé ou en utilisant le programme de résolution égal à égal par défaut (PNRP). Notez que PNRP n'est pas disponible sous Windows Server 2003. Par conséquent, un programme de résolution personnalisé doit être utilisé pour exécuter cet exemple sur un système qui exécute Windows Server 2003. Par défaut, cet exemple est installé pour utiliser un programme de résolution personnalisé. Le point de terminaison de la conversation défini dans le fichier de configuration suivant détermine si un programme de résolution personnalisé ou le programme de résolution par défaut est utilisé. Pour basculer sur le programme de résolution égal à égal par défaut (PNRP), remplacez BindingCustomResolver par BindingDefault sous bindingConfiguration dans le fichier de configuration de l'exemple.

<!-- Chat instance participating in the mesh. -->
         <endpoint name="ChatEndpoint"
                   address="net.p2p://chatMesh/ServiceModelSamples/Chat" 
                   binding="netPeerTcpBinding" 
                   bindingConfiguration="BindingCustomResolver" 
                   contract="Microsoft.ServiceModel.Samples.IChat">
         </endpoint>

Pour activer le nœud égal à égal afin de communiquer avec le service de programme de résolution égal à égal Peer Channel, la configuration côté client du programme de résolution égal à égal personnalisé Peer Channel est définie dans le fichier de configuration.

<!-- Client used to communicate with the custom resolver service. -->
<client>
<endpoint configurationName="CustomPeerResolverEndpoint"
address="net.tcp://localhost/ServiceModelsamples/peerResolverService"
    binding="netTcpBinding"
    bindingConfiguration="Binding3"
    contract="Microsoft.ServiceModel.SamplesICustomPeerResolver">
</endpoint>
</client>

L'adresse identifie l'adresse du service de résolution. Si le service de résolution s'exécute sur un ordinateur distant, remplacez localhost par un nom de domaine complet.

L'exemple montre également comment récupérer le nœud égal à égal d'IClientChannel et comment s'inscrire aux événements en ligne et hors ligne avec IOnlineStatus. Un événement en ligne est initialisé lorsque le nœud égal à égal est connecté à au moins un autre nœud égal à égal dans le maillage. Un événement hors connexion est initialisé lorsque le nœud égal à égal n'est connecté à aucun autre nœud égal à égal dans le maillage.

Actuellement, les métadonnées ne peuvent pas être générées parce l'utilitaire des métadonnées de service (Svcutil.exe) n'est pas intégré à un canal égal à égal.

Lorsque vous exécutez l'exemple, les messages de conversation envoyés par une instance de conversation sont affichés dans les fenêtres de console d'autres instances de conversation. Appuyez sur la touche Q suivie par ENTRÉE dans chaque fenêtre de console pour fermer l'instance.

Remarque :

L'exemple ne gère pas actuellement toutes les exceptions possibles que l'infrastructure peut lever. Si vous utilisez ces exemples dans un environnement commercial ou de production, respectez les meilleures pratiques en matière de gestion des exceptions.

Voir aussi

Tâches

Procédure pas à pas : création et utilisation des services WCF

Consommation de services ASMX et WCF, exemple