2009-04-29 2 views
3

Nous construisons un système qui interagit avec un système externe sur TCP/IP en utilisant le FIX Protocol. J'ai utilisé WCF pour communiquer de client à serveur, où j'avais le contrôle sur le client et le serveur, mais jamais sur un système TCP/IP externe. Est-ce possible avec WCF? Si oui, la communauté pourrait-elle fournir des liens pour que je puisse commencer et me retrouver dans la bonne direction?Est-il possible de communiquer avec un système externe via TCP/IP en utilisant WCF?

Malheureusement, je n'ai pas beaucoup plus d'informations que ce qui est fourni ci-dessus, car nous sommes encore au début des 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 l'utiliser comme une opportunité d'apprentissage et apprendre la WCF.

+1

+1 ... une bonne question pour ceux qui veulent mélanger WCF et TCP/IP avec des sockets. –

+1

Nous avons entendu dire que WCF peut communiquer sur de nombreux types de liaisons et ne jamais avoir à changer du tout le modèle de programmation . Mais si nous pouvons seulement utiliser WCF avec des systèmes où nous avons le contrôle sur les deux systèmes connectés, peut-être avons-nous mal compris la valeur de WCF – MedicineMan

Répondre

1

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é, à part TCP et accepter les tags FIX.

Pourquoi ne pas dans l'application WCF ouvrir une connexion TCP un socket. Cela devrait faire l'affaire d'une manière plus simple.

+0

pourquoi ne pas simplement utiliser une socket et n'utiliser pas du tout WCF? Je ne vois pas comment WCF aide si j'utilise une socket. Peut-être que je ne comprends pas ce qu'est un SOCKET. Voulez-vous dire une socket TCP/IP? – MedicineMan

+3

Exactement, je n'utiliserais pas du tout wcf, mais je présume qu'il a plus que ce qu'il a spécifié, ce qui rend le modèle SOA implémenté avec WCF. Je pense que OP devrait fournir plus d'informations sur son problème –

0

I pense donc. J'ai un système que j'ai presque fonctionné qui était censé faire presque exactement cela (WCF sur HTTP à partir d'Internet). Le fournisseur de serveur ne semblait pas vouloir le penser, vous aurez donc besoin des bonnes permissions à cet effet pour le faire fonctionner.

Vers le haut: Je ne vois pas pourquoi pas.

2

Possible? Peut-être que oui, mais ça va prendre du travail. Pour commencer, vous devez écrire un canal de transport WCF personnalisé qui gère les spécificités de vos protocoles TCP/IP (vous devrez écrire tout le code de gestion de socket et le connecter au modèle de canal WCF) . C'est parce que le canal TCP dans WCF n'est pas pour ce genre de travail, mais utilise un protocole de fil relativement propriétaire et non documenté.

Je ne connais pas suffisamment FIX pour dire à quel point ce serait complexe, mais il y a quelques pièges quand on écrit des canaux WCF et la documentation dans ce domaine n'est pas géniale.

La deuxième partie à traiter est l'encodage des messages. Pour WCF, tous les messages sont XML. Autrement dit, une fois qu'un message est transmis à la pile WCF, il doit ressembler à un infoset XML au moment de l'exécution. FIX n'utilise pas XML (afaik), vous devrez donc l'adapter un peu.

Il y a deux façons dont vous pouvez le contourner:

  1. La manière simple: Supposons que le serveur/client utilisera une interface spécifique et le format des données, et que votre canal tout le travail dur de traduire les messages FIX vers/depuis ce format. L'exemple le plus simple serait que votre code WCF utilise un contrat de service simple avec une méthode prenant une chaîne, puis encapsulant simplement la chaîne de message FIX dans le format XML qui satisfait le sérialiseur de contrat de données pour ce contrat. Cependant, le code utilisateur devra encore traiter du décodage du format FIX plus tard.

  2. Effectuez tout le travail 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 un meilleur streaming et ainsi de suite).

La grande question est 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 également à l'esprit que les abstractions fournies par la WCF ont un prix. En particulier, certains aspects de la WCF peuvent être problématiques si vous avez des besoins très en temps réel, ce que je comprends est commun dans le type d'environnement financier que vous regardez.

Si tel est le cas, il se peut très bien que vous seriez mieux servi en sautant WCF et coller un peu plus près du métal. Vous aurez besoin de faire le travail de socket de toute façon, donc c'est quelque chose à considérer là.

Hope this helps :)

0

Pas vraiment - Mme n'a pas fait le gestionnaire de connexion TCP/IP pour parler aux services non-WCF, ils ont supposé que vous écririez un service Web pour le faire.

Ceci est discuté here on SO.

Questions connexes