2010-05-01 1 views
0

J'ai converti une application VB .Net 3.5 pour utiliser le peer-to-peer WCF en utilisant l'exemple Microsoft disponible de l'application Chat. Je me suis assuré que j'ai copié le fichier app.config pour l'échantillon (modifié les noms pour mon application), ajouté les références appropriées. J'ai suivi tous les tutoriels et ajouté les tags et la structure appropriés dans mon code d'application. Tout fonctionne sans erreur, mais les clients reçoivent uniquement des messages d'eux-mêmes et non des autres clients. L'exemple d'application de chat fonctionne parfaitement avec plusieurs clients. La seule différence que je pourrais trouver est que le serveur sur l'échantillon cible le framework 2.0, mais je suppose que c'est faux et qu'il le construit dans au moins 3.0 ou que la référence System.ServiceModel serait cassée. Y at-il quelque chose qui doit être enregistré que l'échantillon est en train de faire dans les coulisses ou l'échantillon est-il un type de projet spécial? Je suis confus. Ma prochaine étape consiste à copier toutes mes classes et la logique de mon application à l'exemple d'application, mais c'est probablement beaucoup de travail.
Voici mon client App.config:L'application WCF utilisant l'application Peer Chat comme exemple ne fonctionne pas

 <client><endpoint name="thldmEndPoint" 
          address="net.p2p://thldmMesh/thldmServer" 
      binding="netPeerTcpBinding" 
          bindingConfiguration="PeerTcpConfig" 
      contract="THLDM_Client.IGameService"></endpoint></client> 
    <bindings><netPeerTcpBinding> 
      <binding name="PeerTcpConfig" port="0"> 
       <security mode="None"></security> 
       <resolver mode="Custom"> 
        <custom address="net.tcp://localhost/thldmServer" binding="netTcpBinding" 
       bindingConfiguration="TcpConfig"></custom> 
       </resolver> 
      </binding></netPeerTcpBinding> 
     <netTcpBinding> 
      <binding name="TcpConfig"> 
       <security mode="None"></security> 
      </binding> 
     </netTcpBinding> 
    </bindings> 

Voici mon serveur App.config:

 <services> 
     <service name="System.ServiceModel.PeerResolvers.CustomPeerResolverService"> 
      <host> 
       <baseAddresses> 
        <add baseAddress="net.tcp://localhost/thldmServer"/> 
       </baseAddresses> 
      </host> 
      <endpoint address="net.tcp://localhost/thldmServer" 
           binding="netTcpBinding" 
       bindingConfiguration="TcpConfig" 
       contract="System.ServiceModel.PeerResolvers.IPeerResolverContract"> 
      </endpoint> 
     </service> 
    </services> 
    <bindings> 
     <netTcpBinding> 
      <binding name="TcpConfig"> 
       <security mode="None"></security> 
      </binding> 
     </netTcpBinding> 
    </bindings> 

Merci à l'avance.

+0

http://asp-net-csharp-vb.blogspot.com/2009/09/wcf-chat-sample.html – Micle

Répondre

0

Je crois avoir trouvé la réponse. J'avais une exception qui ne bouillonnait pas (à cause du contrat d'opération One-Way) et cela annulait cette instance. Une fois que ce serait fini, plus de messages ne fonctionneraient plus. Ce serait bien que MS mette au moins ces exceptions sur la pile de sortie. Maintenant que je gère les erreurs avec élégance, les messages pour aller à tous les clients. Une chose à noter est que si vous utilisez un contrat unidirectionnel, vous ne pouvez en aucun cas bloquer les exceptions au client. Je suppose que je comprends, puisque si 4 pairs avaient des exceptions, quelle exception obtiendriez-vous (tous les 4?) Donc je suppose qu'il est logique que dans un maillage pair où les messages sont diffusés, vous ne pouvez obtenir aucune réponse.