2012-02-03 23 views
9

Dzwonię do usługi BizTalk za pomocą WCF. Usługa wymaga ustawienia adresu wsa: replyto w nagłówku SOAP, aby można było wykonać "oddzwanianie" po zakończeniu procesu.Jak korzystać z adresowania WS w WCF i ustawić nagłówek wsa: replyto?

Używamy umowę pierwszego approch z auto-wygenerowany kod z svcutil (nie możemy „tylko” zmiany umowy) ...

I nie jest to możliwe do zrobienia w pliku konfiguracyjnym ...

Widziałem kogoś, kto "nadpisał" niektóre metody tworzenia własnego niestandardowego nagłówka - ale to nie jest niestandardowy nagłówek, to standard w protokole SOAP.

Jak dodać wsa: replyto do nagłówka (SOAP)?

Odpowiedz

10

Aby wywołać usługę wymagającą WS-Addressing z WCF, należy skonfigurować punkt końcowy klienta, aby użyć powiązania, które go obsługuje, takiego jak WSHttpBinding.

Następnie można ustawić nagłówek do określonego adresu URL wsa:ReplyTo w kodzie klienta za pośrednictwem właściwości OperationContext.OutgoingMessageHeaders:

using (new OperationContextScope((IContextChannel)channel)) 
{ 
    OperationContext.Current.OutgoingMessageHeaders.ReplyTo = 
     new EndpointAddress("http://client/callback"); 

    channel.DoSomething(); 
} 

W tym przykładzie mamy do ustawiania nagłówka wsa:ReplyTo do znanego adresu URL, gdzie kanał klient nasłuchuje przychodzące wiadomości oddzwonienia z usługi.

Alternatywnie jeśli usługa obsługuje, można użyć WSDualHttpBinding, który ma wbudowane wsparcie dla komunikacji duplex przez WS-Addressing. W tym przypadku należy ustawić adres zwrotnej za pośrednictwem właściwości WSDualHttpBinding.ClientBaseAddress:

<system.serviceModel> 
    <bindings> 
     <wsDualHttpBinding> 
      <binding clientBaseAddress="http://client/callback" /> 
     </wsDualHttpBinding> 
    </bindings> 

    <client> 
     <endpoint address="http://server/service" 
        binding="wsDualHttpBinding" 
        contract="Namespace.Service" /> 
    </client> 
</system.serviceModel> 
+0

znalazłem rozwiązanie, które były o wiele bardziej skomplikowane niż twój ... Twoje rozwiązanie jest miły, łatwy i czysty ... Dzięki! –

+0

Cieszę się, że mogłem pomóc :) –

+0

Używam Custom Binding, więc musiałem ustawić -> robnick