Web services 使用新的WebServiceProxy在PowerShell中添加自定义SOAP头

Web services 使用新的WebServiceProxy在PowerShell中添加自定义SOAP头,web-services,soap,powershell,soapheader,Web Services,Soap,Powershell,Soapheader,在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/envelop

在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>
...

标题值
....
...
在新的WebServiceProxy PowerShell命令生成的代理上调用方法时,如何类似地添加自定义传出SOAP消息头

编辑
为了澄清,我可以在PowerShell中进行与上面C#中相同的调用,但OperationContext.Current始终为null。我在C#中通过创建OperationContextScope解决了这一问题,但这需要web服务代理的内部通道,而PowerShell的代理似乎不提供该通道。

您的C#代码正在使用WCF中的OperationContext类。PowerShell的新WebServiceProxy cmdlet不使用WCF,而是基于System.Web.Services.Protocols.SoapHttpClientProtocol类创建类

要获取SoapHttpClientProtocol的实例以发送自定义SOAP头,请使用SoapExtension,如下所述:


由于需要创建一个继承自SoapExtension的新类,因此将博客文章的内容移植到PowerShell很可能涉及通过Add-Type cmdlet的TypeDefinition参数使用嵌入式C。\。在C#中,我通过创建OperationContextScope解决了这个问题,但这需要web服务代理的内部通道,PowerShell的代理似乎不提供该通道。请更新您的问题并进行澄清。仅供参考,我最终使用代理的CookieContainer设置Cookie以传递我需要的信息。从杰森的回答来看,我最初的目标似乎是可能的,但有些牵扯其中。如果我要重做一次,我可能会使用由svcutil生成的WCF代理。感谢您的澄清和建议。我开始认为最好的方法可能是调用svcutil来创建WCF服务代理,然后加载生成的程序集。不过,对于我提出的问题,您的答案似乎很好。您通常使用
[SoapHeader]
属性发送自定义的SOAP头。但是,我不知道在这种情况下是否可以使用它。