He desarrollado 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 usa 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?¿Cómo usar el cliente basado en socket con el servicio WCF (net.tcp)?
Respuesta
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á más simple intentar ajustarse al servicio WCF, en lugar de tratar de implementar algo personalizado en WCF, que 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.
Dicho esto, los conectores .NET no se comunican de forma nativa con WCF.
Cualquier intento de hacerlo requerirá una programación personalizada en el lado WCF.
Si está utilizando TcpClient o sockets sin procesar en .NET para conectarse y comunicarse con WCF no importa. 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 cuestión pendiente que es bastante detallado donde explico mi esfuerzo para obtener el código de ejemplo para ser comprobable de forma genérica para el uso de la UDP ...
Is it possible to make the WcfTestClient work for custom transport channels?
Nadie ha respondido a 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 ...
La elección de un transporte
Este artículo establece que "El transporte TCP WCF está optimizado para el escenario donde ambos extremos de la comunicación están utilizando WCF".Tratando de conectar un cliente no WCF para un servicio WCF que utiliza el BasicHttpBinding.
El desarrollador termina escribiendo código personalizado a través del 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 señala que podría ser necesaria la serialización binaria o UDP + TCP + binaria serialización. Hay es una muestra de enlace UDP, como I mencionado anteriormente.
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/solicitudes personalizado escrito a simple WCF Servicios
El autor explica cómo averiguar el formato del mensaje que tiene que ser enviado al servicio, por lo que el TcpClient u otro El cliente de sockets que no es WCF puede enviar la información de escritura al servicio WCF. La implicación de aquí es que no está tratando de conformar el servicio WCF , sino que está forzando al cliente de socket a realizar el pesado levantamiento. Aún así, no obtiene las ventajas incorporadas de las vinculaciones WCF si está esperando que.
http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx
Mi respuesta definitivamente no merece ser downvoted. –
pero usted criticó la maravillosa WCF, por lo tanto, debe ser sacado y disparado :). Sin embargo, tengo +1 de parte mía. – gbjbaanb
Gracias, trato de hacer que mi respuesta sea útil y siempre las actualizo si son incorrectas de alguna manera. Los veo como referencias para mi conocimiento personal también, no simplemente para los puntos en StackOverflow. –
Hy,
no le permiten el rastreo 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 desactivar el modo de seguridad para su unión:
<netTcpBinding>
<binding name="MyCustomBinding">
<security mode="None" />
</binding>
</netTcpBinding>
Pero mejor sería trabajar con certificados.
El Net.TCP vinculante utiliza un formato de trama a nivel de cable personalizado que no está muy documentado, aunque Nicholas Allen comenzó una serie de publicaciones en el 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 WCF a WCF. Si desea interoperar con un formato TCP personalizado que necesita manejar, es mucho mejor que usar sockets sin procesar o crear su propio canal de transporte WCF personalizado (que podría no ser trivial, por cierto)
Está bien documentado, ver [MC-NMF] .NET Message Framing Protocol Specification. – Soonts
- 1. Alojando un servicio WCF con Net.TCP
- 2. Extraño WCF net.tcp excepción
- 3. Cambio de las opciones de socket en el enlace WCF net.tcp
- 4. ¿Cómo alojar el servicio WCF y el servidor TCP en el mismo socket?
- 5. wcf net.tcp usando SSL
- 6. Cómo escribir un transporte personalizado basado en socket para WCF
- 7. Cómo depurar el servicio WCF?
- 8. WCF para construir el servicio basado en SOAP
- 9. Manejando la desconexión del cliente en el servicio dúplex WCF
- 10. Ninject WCF Extension ArgumentNullException usando NET.TCP Binding
- 11. Práctica recomendada para el cliente WCF Duplex
- 12. Detectar desconexión de socket en WCF
- 13. Enganche en AppInitialize con el servicio WCF
- 14. cómo consumir el servicio wcf con ruby?
- 15. ¿Cómo hacer ping o verificar el estado del servicio WCF usando el punto final net.tcp desde el servidor remoto?
- 16. Alojamiento del servicio WCF en IIS 7 (WAS) con enlace net.tcp en DOS puertos tcp
- 17. WCF net.tcp rendimiento frente NamedPipes
- 18. Cliente de prueba de WCF que no carga el servicio
- 19. ¿ConcurrencyMode of Multiple tiene relevancia cuando InstanceContextMode es PerCall para un servicio WCF con enlace Net.Tcp?
- 20. Monotouch/WCF: cómo consumir el servicio wcf sin svcutil
- 21. Causa .net Cliente WCF para usar RPC/codificado en lugar de Documento/Literal/Envuelto con el servicio Delphi
- 22. ¿Por qué no puedo conectarme a un servicio de WCF con net.tcp pero puedo con http?
- 23. WCF, net.tcp, y ASP.NET servidor de desarrollo
- 24. ¿Cómo puedo obtener el puerto que escucha un servicio WCF?
- 25. Devolver objetos DataTable con el servicio WCF
- 26. C#: Servicio WCF con el miembro IXmlSerializable convierte en DataSet
- 27. Activar el protocolo net.tcp de Web.config
- 28. WCF conexión net.tcp muere después de 9 horas, 1 minuto
- 29. ¿Puedo usar enlaces net.tcp para protobuf-net WCF?
- 30. Mono El servicio WCF NetTcp solo requiere un cliente a la vez
Para asegurarse de que todos entienden lo que intenta hacer aquí ... ¿Podría aclarar si está intentando utilizar la función de programación de sockets incorporados dentro de .NET para conectarse a un servicio Net.Tcp WCF y viceversa? –
EnocNRoll, tienes toda la razón. Estoy tratando de usar un cliente basado en socket para comunicar un servicio WCF basado en net.tcp. – Burhan