Comment utiliser socket based client avec WCF (net.tcp) service?

j'ai développé un service WCF qui utilise le net.adaptateur tcp et écoute un port spécifique. Je veux me connecter à ce service en utilisant un client .net normal qui utilise des sockets pour envoyer des données au port et écoute les 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 me connecter au service par un autre client qui utilise le Adresse / liens / contrats du service WCF.

Y a-t-il un moyen qui me permette de communiquer avec un service de la WCF en utilisant un client ordinaire basé sur socket?

38
demandé sur Burhan 2009-02-13 16:53:34

3 réponses

la décision clé est de savoir si oui ou non le service WCF doit être conforme au client socket ou si le client socket doit être conforme au service WCF.

il sera plus simple de tenter de se conformer au service de la WCF, plutôt que d'essayer d'implémenter quelque chose de personnalisé au sein de la WCF, ce 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 de la WCF.

cela dit, les sockets.Net ne communiquent pas nativement avec la WCF.

toute tentative de le faire nécessitera une programmation personnalisée du côté de la FMC.

que vous utilisiez des sockets TcpClient ou raw dans .NET pour vous connecter et communiquer avec WCF n'a pas d'importance. Une telle interopérabilité doit être gérée avec une logique personnalisée au sein de la WCF. Notez que Net.Tcp est un protocole de transport personnalisé. Il n'est pas techniquement, TCP utilise TCP de la même manière que TcpClient.

par exemple, UDP est très couramment utilisé par les serveurs socket dans le monde Linux. WCF ne fournit pas de transport UDP intégré. Cependant, il y a un échantillon UDP pour WCF qui implémente UDP pour WCF. Malheureusement, cet exemple n'illustre pas la communication vers et depuis un serveur de socket UPD non-WCF.

j'ai une question en suspens qui est plutôt détaillé où je explique mes efforts à obtenir le code échantillon pour être testable de façon générique pour l'utilisation de UDP...

est-il possible de faire fonctionner le WcfTestClient pour des canaux de transport personnalisés?

personne n'a encore répondu à ma question. Donc, si vous réussissez à faire en sorte que cela fonctionne, je suis très intéressé. Mon cas était motivé par le désir pour le Service WCF d'être en mesure d'appeler à un serveur de socket UDP fonctionnant sur Linux sans avoir à encombrer mon service avec le codage non-WCF. Je ne veux pas mélanger les approches.

Autres Ressources...

50
répondu EnocNRoll - Ananda Gopal 2017-05-23 12:10:28

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

pour être honnête, Net.TCP est vraiment, actuellement, plus utile pour la communication WCF à WCF. si vous voulez interoper avec un format TCP personnalisé que vous devez gérer, vous êtes il est préférable d'utiliser des sockets bruts ou de créer votre propre canal de transport personnalisé de la FMC (qui pourrait ne pas être trivial, btw)

6
répondu tomasr 2009-02-14 17:53:40

Hy,

avez-vous activé le traçage WCF? Parce que si vous le faites et que vous recevez le message suivant: "le service ne vous permet pas de vous connecter anonymement." , puis il est (généralement) un paramètre de sécurité de problème.

dans ce cas désactiver le mode de sécurité pour votre liaison:

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

mais il vaudrait mieux travailler avec des certificats.

0
répondu TomTom 2009-02-13 14:48:06