Pregunta

Estamos creando un sistema que interactúa con un sistema externo a través de TCP / IP utilizando el Protocolo FIX . Usé WCF para comunicarme de cliente a servidor, donde tenía control tanto del cliente como del servidor, pero nunca a un sistema externo basado en TCP / IP. ¿Es esto posible con WCF? Si es así, ¿podría la comunidad proporcionar enlaces para comenzar y orientarme en la dirección correcta?

Lamentablemente, no tengo mucha más información que la que se proporciona anteriormente, ya que todavía estamos en las primeras etapas de planificación. Lo que sabemos es que tenemos un proveedor externo cuyo sistema se comunicará con nuestro sistema a través de TCP / IP. Nos gustaría usar esto como una oportunidad de aprendizaje y aprender WCF.

¿Fue útil?

Solución

No creo que sea posible, al menos no será fácil configurarlo porque no conoces el protocolo de comunicación del otro extremo, excepto por TCP y acepta las etiquetas FIX.

¿Por qué no dentro de la aplicación WCF abre una conexión TCP a SOCKET? Eso debería hacer el truco de una manera más simple.

Otros consejos

¿Posible? Posiblemente sí, pero va a tomar algún trabajo.

Para empezar, deberá escribir un canal de transporte WCF personalizado que maneje las características específicas de sus protocolos basados ??en TCP / IP (es decir, deberá escribir todo el código de manejo de socket y enganchar eso en el modelo de canal WCF). Esto se debe a que el canal TCP en WCF no es para este tipo de trabajo, sino que utiliza un protocolo de conexión relativamente patentado e indocumentado.

No estoy lo suficientemente familiarizado con FIX para decir lo complejo que sería, pero hay algunos problemas al escribir canales de WCF y la documentación en esa área no es muy buena.

La segunda parte con la que tendrás que lidiar es la codificación de mensajes. Para WCF, todos los mensajes son XML. Es decir, una vez que se pasa un mensaje a la pila de WCF, tiene que parecerse a un conjunto de información XML en tiempo de ejecución. FIX no utiliza XML (afaik), por lo que deberá adaptarlo un poco.

Hay dos formas de hacerlo:

  1. La manera fácil: suponga que el servidor / cliente usará una interfaz y un formato específicos para los datos, y haga que su canal haga todo el trabajo duro de traducir los mensajes FIX a / desde ese formato. El ejemplo más simple de esto sería que su código WCF use un contrato de servicio simple con un método que toma una cadena y luego simplemente encapsula la cadena de mensaje FIX en el formato XML que satisface el serializador de contrato de datos para ese contrato. Sin embargo, el código de usuario todavía tendría que lidiar con la decodificación del formato FIX más tarde.

  2. Haga todo el trabajo duro en un Encoder de mensaje WCF personalizado. Es un poco más complejo, pero potencialmente más limpio y más reutilizable (y podrías hacer cosas más complejas como una mejor transmisión, etc.).

La gran pregunta es si esto vale la pena. ¿Cuál es su razonamiento para querer usar WCF para esto? ¿Aprovechando el modelo de programación? Creo que es una consideración importante, pero también tenga en cuenta que las abstracciones que proporciona WCF tienen un precio. En particular, algunos aspectos de WCF pueden ser problemáticos si tiene requisitos de tiempo muy real, que entiendo que es común en el tipo de entorno financiero que está viendo.

Si ese es el caso, es muy posible que te sirvan mejor saltándote WCF y pegándote un poco más cerca del metal. Tendrá que hacer el trabajo de socket de todos modos, así que eso es algo a tener en cuenta.

Espero que esto ayude :)

Yo pienso así. Tengo un sistema en el que casi funcionó y se suponía que debía hacer casi exactamente eso (WCF a través de HTTP desde Internet). El proveedor del servidor pareció no querer dejar que lo pensaran, por lo que necesitará los permisos adecuados para que funcione.

Up shot: no veo por qué no.

En realidad no. Ms no hizo que el controlador de la conexión TCP / IP hablara con servicios que no son WCF, asumieron que escribirías un servicio web para hacerlo.

Esto se explica aquí en SO .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top