2015-09-24 43 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 –