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?
Réponses
Trop de publicités?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...
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...
-
Le choix d'un Transport
Cet article stipule que "La WCF de transport TCP est optimisé pour le scénario où les deux extrémités de la de la communication sont en utilisant WCF". Essayez de vous connecter à un non-WCF client à un service WCF qui utilise le BasicHttpBinding.
L' développeur finit d'écrire du code personnalisé via le client web (par opposition à TcpClient).
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/WCF vs Raw .NET Sockets
La réponse souligne que le protocole TCP + sérialisation binaire ou UDP + binaire la sérialisation peut être nécessaire. Il y est un UDP exemple de liaison, comme je l'ai mentionnés ci-dessus.
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/Rédaction de Demandes Personnalisées à de Simples WCF Services
L'auteur explique comment déterminer le format du message que doit être envoyé pour le service, que le TcpClient ou d'autres non-WCF les sockets client peut envoyer l'écrire information pour le service WCF. L' conséquence de tout cela est que vous n'êtes pas en essayant de se conformer à la WCF de service, mais plutôt de vous forcer le support client de faire le lourd de levage. De même, vous pas le avantages de la WCF les liaisons si vous vous attendez à qu'.
http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-r
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)
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.