从PowerShell调用Web服务:“服务器无法识别HTTP Header SOAPAction的值”

时间:2010-08-06 22:03:52

标签: powershell wsdl

我试图从powershell脚本调用Web服务。

我不是网络服务的作者,也不了解网络服务。 (我也只是在PowerShell中加入。)

网络软件的供应商为我提供了一个.wsdl文件。我针对它运行了wsdl.exe,然后针对生成的.cs文件运行了csc.exe,以生成代理.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

此Web服务的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>

我担心我不理解异常;正如我所说,网络服务不是我声称能力的领域。

如何确定服务器所需的soap操作,以及如何配置$ myVar以使用该soap操作?

1 个答案:

答案 0 :(得分:1)

通常,“soapAction”将使用命名空间限定方法名称(如“http://tempuri.org/GetStuff”)。您可能需要检查您的asmx服务。

如果您正在运行PowerShell V2(如果可以的话,应该是这样),您可以尝试使用New-WebServiceProxy构建代理。

$MyProxy = New-WebServiceProxy -Uri 'http://servername/serverdirectory/serverfile.asmx' -Namespace 'MyService'