2011-01-21 3 views
2

В C# я могу сделать следующее:Добавить пользовательский заголовок SOAP в PowerShell с помощью New-WebServiceProxy

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?

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

+0

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

+0

, пожалуйста, обновите свой вопрос с помощью этого разъяснения. –

+0

FYI Я закончил работу с настройками cookie, используя CookieContainer прокси, чтобы передать необходимую мне информацию. Из ответа Джейсона, похоже, моя первоначальная цель может быть возможной, но в некоторой степени вовлеченной. Если бы я снова это сделал, я бы, вероятно, пошел с прокси-сервером WCF, сгенерированным с помощью svcutil. – dcstraw

ответ

4

Ваш код 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.

+0

Спасибо за разъяснение и предложение. Я начинаю думать, что лучший способ пойти может состоять в том, чтобы позвонить в svcutil, чтобы создать прокси-сервер службы WCF, а затем загрузить полученную сборку. Однако ваш ответ кажется хорошим для вопроса, который я задал. – dcstraw

+0

обычно используется атрибут '[SoapHeader]' для отправки пользовательских заголовков SOAP. Однако я не знаю, может ли это быть использовано в этом сценарии. –

Смежные вопросы