在C#中,我可以执行以下操作:
var header = MessageHeader.CreateHeader("MyHeader", "http://mynamespace", "Header value");
OperationContext.Current.OutgoingMessageHeaders.Add(header);
这会将以下内容添加到SOAP消息中:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<MyHeader xmlns="http://mynamespace">Header value</MyHeader>
....
</s:Header>
...
在New-WebServiceProxy PowerShell小命令生成的代理上调用方法时,如何类似地添加自定义传出SOAP消息 header ?
编辑:
为了澄清起见,我可以在PowerShell中进行与上面C#中所示的相同的调用,但是OperationContext.Current始终为null。我通过创建OperationContextScope在C#中解决了这个问题,但这需要Web服务代理的内部通道,PowerShell的代理似乎没有提供。
最佳答案
您的C#代码正在使用WCF中的OperationContext类。 PowerShell的New-WebServiceProxy cmdlet不使用WCF,而是基于System.Web.Services.Protocols.SoapHttpClientProtocol类创建类。
要获取SoapHttpClientProtocol的实例以发送自定义SOAP header ,请使用SoapExtension,如下所述:
http://blogs.msdn.com/b/kaevans/archive/2007/08/06/programmatically-insert-soapheader-into-soap-request-with-asmx-soapextensions.aspx
由于需要创建一个从SoapExtension继承的新类,因此将博客文章的内容移植到PowerShell极有可能涉及通过Add-Type cmdlet的TypeDefinition参数使用嵌入式C#。
关于web-services - 使用New-WebServiceProxy在PowerShell中添加自定义SOAP header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4763616/