【问题标题】:Consuming XML web services with powershell使用 powershell 使用 XML Web 服务
【发布时间】:2012-07-25 21:50:59
【问题描述】:

我有一些需要定期检查的内部 Web 服务,我正在尝试为它们编写一个 powershell 脚本。 我在 powershell 2.0 上,所以我不能使用“invoke-webrequest”,我仅限于“New-WebServiceProxy”或做一些魔术。 我尝试了此处和类似页面中的示例: http://thepowershellguy.com/blogs/posh/archive/2009/05/15/powershell-v2-get-weather-function-using-a-web-service.aspx

我是 web 服务和 powershell 的新手,所以我通过示例学习。 所有这些都具有格式良好的 WSDL,呈现 XML 结构等。 它们公开了方法和方法采用的参数。

我的内部 Web 服务不是那样的,它们有 schemasLocation 和一些看起来像“多级关系”的东西,例如,在我的 WSDL 上,我得到了一个有趣的方法:

$proxy | get member 

然后我尝试使用公式获取方法的重载

$proxy.InterestingMethod

我得到的只是这样的:

Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1com_ABCWS_Service_wsdl.DBResponse getDB(Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1com_ABCWS_Service_wsdl.DBRequest DBRequest)

我期待我必须发送的参数列表! 我没有在 WSDL 上找到对“DBRequest”的引用,我在 Schema 上看到它们,在另一个 URL 上,它们似乎在不同元素上具有登录名、密码、名称、地址等,在多个级别上, ,所以我不知道如何构造发送这些参数的请求。

此时我不知道我是否可以在 powershell 上使用 NewWebservice 代理。 我想知道这是否仍然可以完成,或者我需要学习如何在没有 Newwebservice Proxy CMDLET 的情况下使用 web 服务“原始”并自己处理 XML(显然,很多复杂) 我这样做对吗?或者我需要以某种方式考虑这个架构 URL?

谢谢各位。 点点滴滴

-- 我在今天 7 月 25 日添加了更多详细信息。 可能是,但我不确定如何发送带有数组的参数(我今天正在阅读一本关于 powershell 的书,它也可能对我有帮助),例如,在 WSDL 中,方法是这样呈现的:

'<message name="getDB"><part name="request" element="ns1:DBRequest"/></message><message name="getDBResponse"><part name="response" element="ns2:DBResponse"/></message>'

WSDL 引用了两个模式,如果我使用 Firefox 打开它们,我会在其中一个看到请求方法,就像这样

'<xs:element name="DBRequest"><xs:complexType><xs:sequence><xs:element name="credentials" type="ns1:Credentials" form="qualified"/><xs:element name="Params" type="ns1:Params" form="qualified"/><xs:element name="Info" type="ns1:Info" form="qualified"/></xs:sequence></xs:complexType></xs:element><xs:element name="DBResponse"><xs:complexType><xs:sequence><xs:element name="transactionResponse" type="ns1:TransactionResponse" form="qualified"/><xs:element name="extremeResponse" type="ns1:extremeResponse" form="qualified" minOccurs="0" maxOccurs="unbounded"/><xs:element name="expressResponse" type="ns1:expressResponse" form="qualified" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType></xs:element></xs:schema>'  

另一方面,我看到了对我必须发送的参数详细信息的引用,如下所示:

'xs:complexType name="Credentials">'

像这样

'<xs:complexType name="Params"><xs:sequence><xs:element name="age" type="xs:string" minOccurs="0"/><xs:element name="cType" type="tns:CTypeEnum"/><xs:element name="Method" type="xs:string"/><xs:element name="sType" type="tns:sTypeEnum"/></xs:sequence></xs:complexType>'  

明白我的意思了吗? WSDL 没有向我显示我必须传递的参数(或参数),它们位于架构内,因此,我无法弄清楚如何构造请求。

【问题讨论】:

    标签: xml web-services powershell


    【解决方案1】:

    根据错误你试试:

    $proxy.getDB("Your database request")
    

    【讨论】:

    • 其实'DB'这个名字是一个巧合,它不是一个DB查询,而是一个应该接受大约6个参数的方法,其中大部分是字符串,还有几个'integer') .我尝试发送参数,如下所示: $proxy.getDB("login", "password", "param3", "param4", "param5", "param6") 但我得到:找不到“getDB”的重载和参数计数:“6”。
    • 根据你得到的消息,getDB只取一个参数,也许你的参数在一个数组中?
    • 嗨 JP 我虽然也一样,但它是一个数组或类似的东西,但我不知道如何使用它,我在上面写了关于它的其他详细信息,(空间减少在这里答案框)
    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 2011-06-09
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多