.net - servicio - the start mode for the net tcp port sharing service must be set to automatic
¿Cómo usar el cliente basado en socket con el servicio WCF(net.tcp)? (3)
El enlace Net.TCP utiliza un formato de trama 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)
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?
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:
<netTcpBinding>
<binding name="MyCustomBinding">
<security mode="None" />
</binding>
</netTcpBinding>
Pero sería mejor trabajar con certificados.
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 intento de hacerlo requerirá programació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 codificación que no sea WCF. No quiero mezclar enfoques.
Otros recursos...
Elegir un transporte
Este artículo establece que "El transporte WCF TCP está optimizado para el escenario donde ambos extremos de la comunicación usan WCF".Intentando conectar un cliente que no sea WCF a un servicio WCF que usa BasicHttpBinding.
El desarrollador termina escribiendo código personalizado a través de WebClient (en contraposición a TcpClient).
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/WCF vs. Raw .NET Sockets
La respuesta indica que podría ser necesaria la serialización binaria TCP + o la serialización binaria UDP +. Hay una muestra de enlace UDP, como mencioné anteriormente.
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/Escribir solicitudes personalizadas para servicios simples de WCF
El autor explica cómo descubrir el formato del mensaje que se debe enviar al servicio, de modo que el cliente TcpClient u otro sockets que no sean WCF puedan enviar la información de escritura al servicio WCF. La implicación aquí es que no está intentando conformar el servicio WCF, sino que está forzando al cliente de socket a hacer el trabajo pesado. Aun así, no obtendrá las ventajas incorporadas de las vinculaciones WCF si está esperando eso.
http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx