Добавьте собственный заголовок SOAP в PowerShell, используя New-WebServiceProxy - PullRequest
3 голосов
/ 21 января 2011

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

Как аналогичным образом добавить настраиваемый заголовок исходящего SOAP-сообщения при вызове методов для прокси-сервера, сгенерированного командлетом New-WebServiceProxy PowerShell?

Редактировать : Чтобы уточнить, я могу сделать те же вызовы в PowerShell, которые я показываю в C # выше, но OperationContext.Current всегда нулевой. Я обошел это в C #, создав OperationContextScope, но для этого требуется внутренний канал прокси-сервера веб-службы, который, по-видимому, прокси-сервер PowerShell не предоставляет.

1 Ответ

4 голосов
/ 15 февраля 2011

Ваш код C # использует класс OperationContext из WCF.Командлет PowerShell New-WebServiceProxy не использует 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, скорее всего, будет включать использование встроенного C # через TypeDefinition командлета Add-Type.параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...