2015-09-24 70 views
1

我在.NET環境中調用Java SOAP Web服務。我將該服務添加爲Web參考,它爲我加載了代理和配置設置。到現在爲止還挺好。如何從WS響應中提取SOAP標頭

對我來說,就像調用另一個庫,因爲所有類型都被加載,我可以調用方法並將返回類型分配給.Net爲我生成的代理類。

但是,我的提供者說他們正在發送一些cookies在SOAP標頭中。現在,我如何從我的C#代碼訪問SOAP標頭?因爲當我調用服務並檢索響應時,就像調用一個方法並檢索一個Typed響應一樣。不確定如何從中提取SOAP頭信息。

任何想法?

回答

3

您可以使用的OperationContext類:https://msdn.microsoft.com/pt-br/library/system.servicemodel.operationcontext%28v=vs.110%29.aspx

使用的OperationContext從服務操作內訪問 當前操作執行環境。特別地,操作 上下文用於橫跨操作的部分訪問回調信道雙工服務, 存儲額外的狀態數據,以及 訪問傳入消息和屬性以及添加傳出 消息頭和屬性。

您可以閱讀這樣的標題信息(替換「曲奇」與要讀取標籤名):

var cookieIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("Cookie", ""); 
XmlReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(cookieIndex).ReadSubtree(); 

希望它可以幫助

+1

我OperationContext.Current爲空。如果我在客戶端,情況不會如此。它表示如果你在服務器上並且客戶端打電話給你,你會有一個上下文嗎? – TeaLeave

+2

在客戶端上,您必須[在服務調用周圍創建'OperationContextScope'](https://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontextscope(v = vs.110).aspx) ,最好用'using'語句完成。 – acelent

+1

AS @PauloMadeira注意到,您需要OperationContext的作用域。這取決於你如何創建你的客戶端。這篇文章有很好的信息:http://stackoverflow.com/questions/15205337/current-operationcontext-is-null-in-wcf-windows-service –