Добавьте собственный заголовок SOAP в PowerShell, используя New-WebServiceProxy
В 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 ответ
Ваш код C# использует класс OperationContext из WCF. Командлет New-WebServiceProxy в PowerShell не использует 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.