在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消息头?
修改: 为了澄清,我可以在上面的C#中显示的PowerShell中进行相同的调用,但OperationContext.Current始终为null。我通过创建一个OperationContextScope在C#中解决这个问题,但这需要Web服务代理的内部通道,而PowerShell的代理似乎没有提供。
答案 0 :(得分:4)
您的C#代码正在使用WCF中的OperationContext类。 PowerShell的New-WebServiceProxy cmdlet不使用WCF,而是基于System.Web.Services.Protocols.SoapHttpClientProtocol类创建类。
要获取SoapHttpClientProtocol的实例以发送自定义SOAP标头,请使用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#。