我有一些内部 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="凭据">'
像这样
'<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 没有显示我必须传递的参数(或参数),它们位于架构内,因此,我无法弄清楚如何构造请求。