2009-02-27 6 views
1

J'ai un HttpHandler qui agit comme un proxy entre le visiteur du site et un service WCF hébergé par Windows. En ce moment, le service WCF est configuré pour gérer une requête json, mais je voudrais convertir la requête json en net.pipe ou net.tcp ou en un des protocoles que WCF peut gérer. J'espère avoir une communication qui va:Conversion de demande WCF de JSON à IPC/TCP/etc

client < --json via HTTP (S) -> IIS/HttpHandler < --SOAP/XML en utilisant net.pipe -> service WCF

Est-ce possible?

En ce moment j'utilise juste le HttpHandler pour faire un autre webrequest au service de WCF, mais voudrait s'éloigner de cela. Le problème est qu'avec le proxy, il n'y a pas de véritable moyen (que je puisse voir), sur la façon de désérialiser une réponse si la méthode que j'appelle contient un paramètre out.

Par exemple prendre cette méthode:

int DoSomething(string x, out long y) 

Si je devais appeler cette méthode en utilisant un objet proxy standard WCF dans la logique du proxy HttpHandler, comment pourrais-je sérialisation alors que la réponse à JSON (en utilisant OSEFW formatage json) et le renvoyer au client?

+0

Je ne suis pas sûr de comprendre le problème - JSON est un format de données et net.tcp est un protocole qui fournit de nombreux formats de données. –

+0

à droite, mais WCF formate tous les autres protocoles dans XML/SOAP par défaut. Permettez-moi de nettoyer ma question rapidement –

Répondre

0

Je pense que si vous concevez avec des services en tête, vous voulez que vos "méthodes" aient des signatures orientées message.

ResponseMessage DoSomething(RequestMessage) {...} 

plutôt que

int DoSomething (String x, out long y) {...} 

Il évite le défi que vous soulevez dans votre question, entre autres problèmes. Cela vous aide à penser en termes de messages entrant et sortant du service, plutôt que de paramètres. Retour à la racine de votre question ... Je pense que ce que vous suggérez est un pont de protocole entre le client qui parle JSON/HTTP et le service WCF, que vous voulez écouter sur un réseau. canal de canalisation. Eh bien, désolé de le dire, il n'y a pas de pont de protocole automagique qui le fait pour vous.

Mais peut-être que vous ne cherchez pas la magie. Si vous êtes satisfait de l'écriture du code de pont, alors oui, cela fonctionnera bien. Mais nettoyez ces signatures de méthode en premier.