Я пытаюсь вызвать веб-службу из сценария 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 для использования этого действия мыла?