2009-03-15 9 views
2

etwas scheint mir sehr seltsam, ich habe mit Reflektor innen WCF zu sehen versucht, aber verzeihen Sie mir es zu schwer ist. Zu verstehen :(Wie WsDualHttpBinding über den Callback-Kanal informiert?

Wenn ein Client eine Duplex-Dienst auf Server B mit wsDualHttpBinding nennen, dachte ich, dass Client A umfassen die Client-Basisadresse (die Adresse des Callback) im Header der Anforderung wie diese

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

.

Aber OperationContext.Current.IncomingMessageHeaders.ReplyTo kehrt null ...

Wie wsDualHttpBinding tut, um die Adresse des Client-Kanals zu kennen ???

Gibt es etwas schwarze Magie oder etwas?

Lösung

Dies ist die zuverlässige Sitzung, die die replyTo Adresse für den Transport verantwortlich ist. Wir können dies überprüfen, mit diesen Bindungselementen in einem custom

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

Entfernen Sie die reliableSession und Ihr Dienst hat nicht den Rückruf Kanal mehr ...

Antwort

2

Ich denke, dass diese Informationen über Nachrichten beim Einrichten der Sitzung übergeben wird. Wenn Sie ein Tool wie "fiddler" verwenden, um den gesamten HTTP-Verkehr zu überwachen, werden Sie es in einer ersten Sitzungs-Setup-Nachricht sehen. Keine Magie, der Client muss dem Server mitteilen, wo er zurückrufen soll.

+0

Fiddler zeigt nicht den Verkehr zwischen zwei Endpunkten auf dem gleichen Computer haben Sie eine andere Lösung? –

+1

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

+1

Setzen Sie einen Punkt (.) in der URL: http://localhost./MyService/Service.svc und Fiddler wird es abholen. –

0

Wenn ich mit Sockets arbeiten, Adresse des Anrufers auch zur Verfügung steht - Meine Vermutung ist, dass zu wissen, auf welche Adresse Sie antworten müssen, ist eine ziemlich Low-Level-Funktion der Netzwerkkommunikation ...

+0

Es kann möglich sein, mit einer nicht-Duplex-Bindung, aber Duplex-Bindung verwenden IOutputChannel/IInputChannel (die niedrigste Ebene der Abstraktion von WCF) diese Kanal kann nur empfangen oder senden, aber nicht beide, so glaube ich nicht, dass es hier ist. Ich bestätige, dass Sie mit dem Reflektor vielleicht recht haben. –

Verwandte Themen