2012-02-03 12 views
9

WCF kullanarak bir BizTalk hizmetini arıyorum. Hizmet, işlem yapıldığında bir 'geri arama' yapabilmek için SOA başlığında ayarlanacak wsa: replyto adresini gerektirir.WS-Adreslemeyi WCF'de nasıl kullanabilirim ve wsa: answerto üstbilgisini nasıl ayarlayabilirim?

...

Biz ...

Svcutil gelen otomatik oluşturulan kod ile sözleşmeye ilk yargıyı (biz 'sadece' sözleşme değiştiremezsiniz) kullanıyorsanız Ve yapılandırma dosyasında yapmak mümkün değildir

Birinin kendi özel üstbilgisini yapmak için bazı yöntemleri 'geçersiz kıldığını' gördüm - ancak bu özel bir üstbilgi değil, SOAP protokolünde bir standart.

wsa: answerto'yu (SOAP) üstbilgisine nasıl ekleyebilirim?

cevap

10

WCF'den WS-Addressing gerektiren bir hizmeti çağırmak için, istemci uç noktasını, WSHttpBinding gibi destekleyen bir ciltleme kullanacak şekilde yapılandırmanız gerekir.

Ardından OperationContext.OutgoingMessageHeaders özelliği üzerinden müşteri kodunuza belirli bir URL'ye wsa:ReplyTo başlığını ayarlayabilirsiniz: Bu örnekte

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

    channel.DoSomething(); 
} 

biz müşteri kanalı dinler bilinen bir URL'ye wsa:ReplyTo başlığını ayarlarken Servisten gelen geri arama mesajları.

Alternatif hizmet o destekler , sen WS-Adresleme yoluyla dubleks haberleşme için destek inşa etti WSDualHttpBinding, kullanabilirsiniz. Bu durumda WSDualHttpBinding.ClientBaseAddress özelliği üzerinden geri arama adresini ayarlarsınız:

<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

ben çok daha karmaşık seninkinden daha vardı bir çözüm buldu ... Sizin çözüm, güzel, kolay ve temiz ... teşekkürler! –

+0

Yardım edebileceğime sevindim :) –

+0

Özel Ciltleme kullanıyorum, bu yüzden ayarladım -> robnick

İlgili konular