2009-03-15 6 views
2

quelque chose semble très étrange pour moi, je l'ai essayé de regarder à l'intérieur WCF avec réflecteur, mais pardonnez-moi, il est trop difficile à comprendre :(.Comment WsDualHttpBinding fait pour connaître le canal de rappel?

Lorsque le client A appeler un service duplex sur le serveur B avec wsDualHttpBinding, je pense que client A comprennent l'adresse de base du client (l'adresse du rappel) dans l'en-tête de la demande comme celui-ci

<a:ReplyTo>http://client.foo/29293-3287-2387-3291</a:ReplyTo> 

.

Mais OperationContext.Current.IncomingMessageHeaders.ReplyTo nULL retourne ...

Comment wsDualHttpBinding fait pour connaître l'adresse du canal client ????

Y at-il de la magie noire ou quelque chose?

Solution

Ceci est la session fiable qui est responsable pour le transport de l'adresse replyTo. Nous pouvons vérifier avec ces éléments de fixation dans un CustomBinding

<reliableSession/> 
<compositeDuplex/> 
<oneWay></oneWay> 
<textMessageEncoding></textMessageEncoding> 
<httpTransport/> 

Retirez le reliableSession et votre service pas plus le canal de rappel ...

Répondre

2

Je pense que cette information est transmise par des messages lors de l'établissement de la session. Si vous utilisez un outil comme "fiddler" pour regarder tout le trafic http, mon intuition est que vous le verrez dans un message d'installation de session initiale. Pas de magie, le client doit dire au serveur «où rappeler».

+0

Fiddler ne montre pas le trafic entre deux points de terminaison sur la même machine avez-vous une autre solution? –

+1

Enregistrement de messages? http://msdn.microsoft.com/en-us/library/aa702726.aspx http://blogs.msdn.com/madhuponduru/archive/2006/05/18/601458.aspx – Brian

+1

Mettez un point (.) dans l'URL: http://localhost./MyService/Service.svc et fiddler le ramassera. –

0

Quand je travaille avec les sockets, l'adresse de l'appelant est également disponible - Je suppose que savoir à quelle adresse vous auriez besoin de répondre est une fonctionnalité assez bas niveau de la communication réseau ...

+0

Il est possible avec une liaison non-duplex, mais la liaison duplex utilise IOutputChannel/IInputChannel (le plus bas niveau d'abstraction de WCF) que ces canaux peuvent recevoir ou envoyer mais pas les deux, donc je ne pense pas que c'est ici. Je vérifie avec le réflecteur peut-être que vous avez raison. –

Questions connexes