¿Cómo usar el cliente basado en socket con el servicio WCF (net.tcp)?

Desarrollé un servicio WCF que usa el adaptador net.tcp y escucha un puerto específico. Quiero conectarme a ese servicio utilizando un cliente .NET normal que usa conectores para enviar datos al puerto y escuchar las respuestas.
Cuando trato de enviar datos a este servicio, aparece el error: “La conexión existente fue cerrada a la fuerza por el host remoto”.
Sin embargo, puedo conectarme con el servicio por otro cliente que utiliza la dirección / vinculación / contratos del servicio WCF.
¿Hay alguna manera que me permita comunicarme con un servicio WCF usando un cliente basado en socket ordinario?

La decisión clave es si hacer que el servicio WCF se ajuste al cliente de socket o si hacer que el cliente de socket se conforme al servicio WCF.

Sería más simple intentar ajustarse al servicio WCF, en lugar de intentar implementar algo personalizado en WCF, lo cual nunca es fácil. En la parte inferior de la sección Otros recursos a continuación, verá un enlace que describe la inspección de mensajes que es necesaria para intentar ajustarse a un servicio WCF.

Una vez dicho esto, los conectores .NET no se comunican de forma nativa con WCF.

Cualquier bash de hacerlo requerirá progtwigción personalizada en el lado WCF de las cosas.

No importa si está usando TcpClient o sockets sin formato en .NET para conectarse y comunicarse con WCF. Cualquier interoperabilidad de este tipo debe ser manejada con lógica personalizada dentro de WCF. Tenga en cuenta que Net.Tcp es un protocolo de transporte personalizado. Técnicamente no se usa TCP de la misma manera que el TcpClient.

Por ejemplo, UDP es muy comúnmente utilizado por los servidores de socket en el mundo de Linux. WCF no proporciona un transporte UDP incorporado. Sin embargo, hay una muestra UDP para WCF que implementa UDP para WCF. Desafortunadamente, esa muestra no ilustra la comunicación hacia y desde un servidor de socket UPD que no es WCF.

Tengo una pregunta destacada que es bastante detallada en la que explico mi esfuerzo para que el código de muestra sea genéricamente comprobable para usar UDP …

¿Es posible hacer que WcfTestClient funcione para canales de transporte personalizados?

Nadie ha respondido mi pregunta todavía. Entonces, si logras que esto funcione, estoy muy interesado. Mi caso fue impulsado por el deseo de que el Servicio WCF pueda llamar a un servidor de socket UDP que se ejecuta en Linux sin tener que saturar mi servicio con una encoding que no sea WCF. No quiero mezclar enfoques.

Otros recursos…

El enlace Net.TCP utiliza un formato de ttwig a nivel de cable personalizado que no está realmente documentado, aunque Nicholas Allen comenzó una serie de publicaciones de blog sobre el tema recientemente. La serie comienza aquí: http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

Para ser honesto, Net.TCP es realmente, actualmente, más útil para la comunicación de WCF a WCF. Si desea interoperar con un formato TCP personalizado que necesita manejar, es mucho mejor que use sockets sin formato o cree su propio canal de transporte WCF personalizado (que podría no ser trivial, por cierto)

Hy,

¿Habilita el seguimiento de WCF? Porque si lo hace, recibirá el siguiente mensaje: “El servicio no le permite iniciar sesión de forma anónima”. entonces es (por lo general) un problema de configuración de seguridad.

En este caso, deshabilite el modo de seguridad para su enlace:

     

Pero sería mejor trabajar con certificados.