39 votes

Comment utiliser un client basé sur un socket avec le service WCF (net.tcp)?

J'ai développé un service WCF qui utilise le net.tcp adaptateur et à l'écoute sur un port spécifique. Je veux me connecter à ce service en utilisant une normale .net client qui utilise les sockets pour envoyer des données au port et à l'écoute de réponses.
Lorsque je tente d'envoyer des données à ce service, j'obtiens l'erreur: "La connexion existante a dû être fermée par l'hôte distant".
Cependant, je suis en mesure de se connecter au service par un autre client qui utilise l'Adresse/Liaison/Contrats de service WCF.
Est-il un moyen qui me permet de communiquer avec un service WCF en utilisant une simple prise en fonction du client?

52voto

EnocNRoll Points 2897

La décision clé est de savoir si ou de ne pas faire le service WCF conforme à la socket du client ou si le socket client de se conformer à la WCF service.

Il sera plus simple de tenter de se conformer à la WCF service, plutôt que d'essayer de mettre en œuvre quelque chose de personnalisé à l'intérieur de la WCF, qui n'est jamais facile. Au bas de la section "Autres Ressources" ci-dessous, vous verrez un lien qui décrit le message d'inspection qui est nécessaire pour tenter de se conformer à un service WCF.

Cela dit, .NET sockets ne pas communiquer de manière native avec WCF.

Toute tentative de le faire nécessitent une programmation personnalisée sur la WCF côté des choses.

Si vous utilisez TcpClient ou les sockets raw dans .NET pour se connecter et communiquer avec WCF n'a pas d'importance. Une telle interopérabilité doivent être manipulés avec une logique personnalisée à l'intérieur de la WCF. Notez que Net.Tcp est une coutume protocole de transport. Il n'est pas techniquement à l'aide de TCP de la même manière que le TcpClient est.

Par exemple, UDP est très couramment utilisé par les serveurs de socket dans le monde de Linux. WCF n'a pas de fournir une solution intégrée de transport UDP. Cependant, il y a une UDP échantillon pour WCF qui implémente UDP pour la WCF. Malheureusement, cet exemple n'illustre pas communiquer et à partir d'un non-WCF UPD socket serveur.

J'ai une question en suspens, c'est plutôt détaillé où j'explique mes efforts pour obtenir des exemples de code générique être testée pour l'utilisation de UDP...

http://stackoverflow.com/questions/484717/error-externally-testing-wcf-udp-custom-transport-channel-sample-from-the-windows

Personne n'a répondu à ma question. Donc, si vous arrivez à faire ce travail, je suis très intéressé. Mon cas a été motivée par un désir pour le Service WCF pour être en mesure de faire appel à un socket UDP serveur fonctionnant sous Linux sans avoir à encombrer mon service avec les non-WCF de codage. Je ne veux pas mélanger les approches.

D'Autres Ressources...

6voto

tomasr Points 9990

Le Net.TCP liaison utilise un personnalisé du fil au niveau de cadrage format qui n'est pas vraiment documenté, bien que Nicholas Allen a commencé une série de billets de blog sur le sujet récemment. La série débute ici: http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

Pour être honnête, Net.TCP est vraiment, actuellement, de plus utile pour la WCF pour WCF communication. si vous voulez interop avec un TCP personnalisé format que vous avez besoin pour gérer, vous êtes beaucoup mieux, soit en utilisant les sockets raw ou la création de vos propres WCF canal de transport (ce qui pourrait ne pas être négligeable, btw)

0voto

TomTom Points 412

Hy,

Avez-vous activé le traçage WCF? Parce que si vous obtenez et que vous obtenez le message suivant: "Le service ne vous permet pas de vous connecter anonymement." alors c’est (généralement) un problème de réglage de sécurité.

Dans ce cas, désactivez le mode de sécurité pour votre liaison:

 <netTcpBinding>
   <binding name="MyCustomBinding"> 
      <security mode="None" /> 
   </binding> 
</netTcpBinding>
 

Mais il serait préférable de travailler avec des certificats.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X