2008-12-19 9 views
9

J'ai une plate-forme mobile sur laquelle j'essaye d'écrire du code de communication.Comment écrire un transport personnalisé basé sur socket pour WCF

La plate-forme fournit un mécanisme de communication propriétaire basé sur des fonctions de socket standard. Fondamentalement, l'API socket de la plate-forme ressemble exactement à l'API Windows Socket standard, sauf avec un préfixe sur chacune des fonctions. Je voudrais utiliser WCF pour abstraire les complexités de l'API Sockets de mes applications consommatrices, mais j'ai du mal à trouver des ressources qui décrivent correctement toutes les pièces qui auraient besoin d'être codées.

Quelqu'un peut-il recommander un bon point de départ, ou fournir une description de ce qui serait nécessaire pour écrire un transport basé sur le socket personnalisé pour WCF? Idéalement, j'aimerais pouvoir utiliser HttpBinding sur ce mécanisme de transport.

Merci!

Répondre

10

J'ai mis en place une liste de quelques resources pour écrire un canal de transport WCF qui pourrait être utile. Tous les liens ne sont pas encore actifs, malheureusement, mais la plupart le sont et il y a des trucs utiles là-dedans.

Je mets également un short introduction à la façon dont certaines pièces s'assemblent, ce qui pourrait aider un peu. Quelque chose que je ne comprends pas dans votre question: Vous mentionnez que vous voulez exécuter le HttpBinding sur votre transport. Voulez-vous dire que vous voulez utiliser le canal de transport HTTP de WCF au-dessus de votre API personnalisée de type socket au lieu de l'API Windows sockets standard?

Si oui, alors non, cela ne fonctionnera pas pour diverses raisons. L'une d'entre elles est que les liaisons et les canaux ne sont pas vraiment liés directement. Au lieu de cela, la définition de liaison (c'est-à-dire les éléments de liaison inclus) contrôle la création de la pile de canaux pour votre service/client. Donc, fondamentalement, lorsque vous écrivez votre canal de transport personnalisé, vous allez créer votre propre classe dérivée de TransportBindingElement que vous pouvez utiliser dans une liaison personnalisée pour utiliser votre propre canal de transport au lieu de l'un des canaux par défaut (comme HttpTransport). Cependant, notez qu'un canal de transport est, de toute façon, le bas de la pile de canaux (il n'y a rien en dessous), donc vous ne pouvez pas superposer le HttpTransport au dessus de votre transport personnalisé (même si la limitation de l'API n'était pas là) . En d'autres termes, si vous voulez parler en HTTP, vous aurez besoin de faire cuire le contenu HTTP dans votre implémentation de canal personnalisée. Toutefois, rien ne vous empêche d'utiliser le reste des liaisons http basic/ws par défaut sur votre propre canal, à condition d'exposer les formes de canal appropriées.

+0

très agréable post et des liens! –

+1

ci-dessus le lien ne fonctionne pas. – vikky

Questions connexes