Question

Nous construisons un système qui interagit avec un système externe via TCP / IP en utilisant le protocole FIX . J'ai utilisé WCF pour communiquer de client à serveur, où je contrôlais à la fois le client et le serveur, mais jamais avec un système basé sur TCP / IP externe. Est-ce possible avec WCF? Si tel est le cas, la communauté pourrait-elle fournir des liens pour que je puisse commencer et être dirigée dans la bonne direction?

Malheureusement, je n'ai pas beaucoup plus d'informations que celles fournies ci-dessus, car nous en sommes encore aux premières étapes de la planification. Ce que nous savons, c'est que nous avons un fournisseur externe dont le système communiquera avec notre système via TCP / IP. Nous aimerions utiliser cela comme une opportunité d'apprentissage et apprendre la WCF.

Était-ce utile?

La solution

Je ne pense pas que ce soit possible, du moins ce ne sera pas facile à configurer car vous ne connaissez pas le protocole de communication de l'autre extrémité, à l'exception de TCP et de l'acceptation des balises FIX.

Pourquoi, au sein de l'application WCF, n'ouvrez-vous pas une connexion TCP avec SOCKET? Cela devrait faire l'affaire d'une manière plus simple.

Autres conseils

Possible? Peut-être que oui, mais cela va demander du travail.

Pour commencer, vous devrez écrire un canal de transport WCF personnalisé qui gérera les spécificités de vos protocoles basés sur TCP / IP (c’est-à-dire que vous devrez écrire tout le code de traitement du socket et le lier au modèle de canal WCF). En effet, le canal TCP dans WCF n’est pas destiné à ce type de travail, mais utilise un protocole filaire relativement propriétaire et non documenté.

Je ne connais pas suffisamment FIX pour dire à quel point ce serait complexe, mais il est difficile d’écrire des canaux et de la documentation WCF dans ce domaine.

La deuxième partie dont vous aurez besoin est le codage des messages. Pour WCF, tous les messages sont au format XML. En d'autres termes, une fois qu'un message est transmis à la pile WCF, il doit ressembler à un jeu d'informations XML au moment de l'exécution. FIX n'utilise pas XML (autant que je sache), vous devrez donc l'adapter un peu.

Vous pouvez contourner ce problème de deux manières:

  1. Le moyen le plus simple: supposez que le serveur / client utilise une interface et un format spécifiques pour les données et que votre canal effectue tout le travail de conversion des messages FIX vers / à partir de ce format. L'exemple le plus simple consiste à faire en sorte que votre code WCF utilise un contrat de service simple, une méthode prenant une chaîne, puis encapsulant simplement la chaîne de message FIX dans un format XML satisfaisant le sérialiseur de contrat de données de ce contrat. Cependant, le code utilisateur devra toujours traiter le décodage du format FIX ultérieurement.

  2. Faites tout le travail difficile dans un MessageEncoder WCF personnalisé. C'est un peu plus complexe, mais potentiellement plus propre et plus réutilisable (et vous pourriez faire des choses plus complexes comme une meilleure diffusion en continu, etc.).

La grande question est cependant de savoir si cela en vaut la peine. Quel est votre raisonnement pour vouloir utiliser WCF pour cela? Tirer parti du modèle de programmation? Je pense que c'est une considération importante, mais gardez aussi à l'esprit que les abstractions fournies par WCF ont un prix. En particulier, certains aspects de la WCF peuvent poser problème si vous avez des besoins très en temps réel, ce qui est courant dans le type d’environnement financier que vous envisagez.

Si tel est le cas, il se peut très bien que vous fassiez mieux de sauter la WCF et de vous tenir un peu plus près du métal. De toute façon, vous aurez besoin de faire fonctionner le socket, c'est donc quelque chose à considérer là-bas.

J'espère que cela vous aidera:)

Je le pense . J'ai un système que j'ai presque mis en marche et qui était censé fonctionner presque exactement de la sorte (WCF sur HTTP depuis Internet). Le fournisseur de serveur semblait ne pas vouloir l’autoriser, donc vous aurez besoin des autorisations nécessaires pour le faire fonctionner.

En haut: je ne vois pas pourquoi pas.

Pas vraiment. Mme n'a pas demandé au gestionnaire de connexion TCP / IP de communiquer avec des services autres que WCF. Ils ont donc supposé que vous écririez un service Web pour le faire.

C’est discuté ici sur le SO .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top