2011-03-23 103 views
2

我想在Silverlight應用程序中獲取自定義響應消息頭。如何從Silverlight中的WCF服務響應中獲取自定義SOAP頭?

在服務器端的新的MessageHeader添加到響應報頭:

OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("headerName", "headerNS", "The header value")); 

,我可以看到在提琴手這個頭:

S:信封[ 的xmlns:S = HTTP:// schemas.xmlsoap.org/soap/envelope/ ]

S:部首

headerName [XMLNS = headerNS該 頭值

但是,我無法找到一個方法來讀取Silverlight應用程序服務回調頭值:

  using (new OperationContextScope(proxy.InnerChannel)) 
      { 
       var headers = OperationContext.Current.IncomingMessageHeaders; 
       // headers is null :(

      } 

有誰有類似的問題,遇到過嗎?

回答

0

要從http請求中獲取標頭,請嘗試使用Client HTTP stack

的easies辦法做到這一點是註冊的前綴,例如:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
+0

感謝您的回答,但問題是關於SOAP消息頭 – Brick 2011-03-23 15:52:11

+0

是的,我明白了,但我有一種感覺,這仍然與SL中的Http客戶端堆棧有關。我會試着調查一下 - 也許我會找到辦法來幫助你。 – 2011-03-23 15:59:38

1

獲取SOAP頭在Silverlight中的反應並不容易,因爲它應該是。如果您使用基於事件的回調,那麼您運氣不好 - 它不起作用。您需要使用開始/結束式操作調用,如下例所示。

void Button_Click(...) 
{ 
    MyClient client = new MyClient(); 
    IClient proxy = (IClient)client; // need to cast to the [ServiceContract] interface 
    proxy.BeginOperation("hello", delegate(IAsyncResult asyncResult) 
    { 
     using (new OperationContextScope(client.InnerChannel)) 
     { 
     proxy.EndOperation(asyncResult); 
     var headers = OperationContext.Current.IncomingMessageHeaders; 
     // now you can access it. 
     } 
    }); 
} 

請注意,您不能使用生成的客戶端(從slsvcutil /添加服務引用)直接,你需要將它轉換爲接口,因爲開始/結束方法不暴露(明確實施)在客戶端上類。

相關問題