Вызов веб-служб из powershell: «Сервер не распознал значение HTTP-заголовка SOAPAction» - PullRequest
1 голос
/ 07 августа 2010

Я пытаюсь вызвать веб-службу из сценария powershell.

Я не являюсь автором веб-службы и не знаю много о веб-службах.(Я только усиливаюсь в PowerShell.)

Производитель веб-программного обеспечения предоставил мне файл .wsdl.Я запустил wsdl.exe против него, затем csc.exe против сгенерированного файла .cs, чтобы создать прокси-файлы .dll.

В моем скрипте powershell я создаю экземпляр объекта, устанавливая его URLсвойство и попытка вызвать один из методов:

    [Reflection.Assembly]::LoadFrom("$ProxyDllPath\VendorProxy.dll")
    $myVar = new-object VendorObject
    $myVar.url = "http://servername/serverdirectory/serverfile.asmx"
    $myStuff = $myVar.GetStuff()

Когда я выполняю это, я получаю исключение:

Exception calling "GetStuff" with "0" argument(s): "Server did not recognize the value of HTTP Header SOAPAction: ."
At C:\users\xxx\desktop\xxx.ps1:56 char:55
+     $myStuff = $myVar.GetStuff<<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

Я сделал сетевой захват моего вызова и вижу:

POST /serverdirectory/serverfile.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.4927)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Authorization: NTLM TlRMTVNTUAABAAAAt4II4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==
Host: servername
Content-Length: 0

Описание WSDL для этого веб-сервиса:

<wsdl:operation name="GetStuff">
  <soap:operation soapAction="" style="document" />
  <wsdl:input>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>

Боюсь, что я не совсем понимаю исключение;как я уже говорил, веб-службы - это не та область, в которой я требую компетенции.

Как определить действие мыла, которое требует сервер, и как настроить мой $ myVar для использования этого действия мыла?

1 Ответ

1 голос
/ 07 августа 2010

Обычно «soapAction» имеет имя метода с указанием пространства имен (например, «http://tempuri.org/GetStuff"). Возможно, вам потребуется проверить службу asmx.

Если вы используете PowerShell V2 (что вы должны быть, если вы можете) вы можете попробовать построить свой прокси с New-WebServiceProxy .

$MyProxy = New-WebServiceProxy -Uri 'http://servername/serverdirectory/serverfile.asmx' -Namespace 'MyService'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...