4

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#でそれを回避しますが、それはPowerShellのプロキシが提供していないように見えるWebサービスプロキシの内部チャネルを必要とします。

4

1 に答える 1

4

C# コードは、WCF の OperationContext クラスを使用しています。PowerShell の New-WebServiceProxy コマンドレットは WCF を使用せず、代わりに System.Web.Services.Protocols.SoapHttpClientProtocol クラスに基づいてクラスを作成します。

カスタム SOAP ヘッダーを送信するための SoapHttpClientProtocol のインスタンスを取得するには、次の URL で説明されているように、 SoapExtensionを使用します。 soap-request-with-asmx-soapextensions.aspx

SoapExtension から継承する新しいクラスを作成する必要があるため、ブログ投稿の内容を PowerShell に移植するには、Add-Type コマンドレットの TypeDefinition パラメーターを介して埋め込み C# を使用する必要があります。

于 2011-02-15T02:52:28.613 に答える