Xml 通过Powershell实现SOAP的语法
我正在尝试使用PVOrder方法,通过带有Powershell的Globalsign API订购SSL证书。URL是,他们在这里有文档 我使用的Powershell非常简单:Xml 通过Powershell实现SOAP的语法,xml,web-services,powershell,soap,wsdl,Xml,Web Services,Powershell,Soap,Wsdl,我正在尝试使用PVOrder方法,通过带有Powershell的Globalsign API订购SSL证书。URL是,他们在这里有文档 我使用的Powershell非常简单: $URI = "https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl" $result = (iwr $URI –infile "C:\Users\Administrator\Desktop\script_other\pvorder_soap.xml
$URI = "https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl"
$result = (iwr $URI –infile "C:\Users\Administrator\Desktop\script_other\pvorder_soap.xml" –contentType "text/xml" –method POST)
XML看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<xs:complexType name="PVOrder">
<xs:sequence>
<xs:element minOccurs="0" name="Request" type="tns:BmV1PvOrderRequest"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BmV1PvOrderRequest">
<xs:sequence>
<xs:element name="OrderRequestHeader" type="tns:OrderRequestHeader"/>
<xs:element name="OrderRequestParameter" type="tns:OrderRequestParameter"/>
<xs:element name="MSSLProfileID" type="xs:string"/>
<xs:element name="MSSLDomainID" type="xs:string"/>
...
</xs:complexType>
...
然而,我在试图找出参数应该定义在哪里时遇到了困难。我发现的大多数教程中的XML设计与这里的XML不同。在google上的一些搜索让我尝试将参数放在xml的末尾,但我尝试将参数放在xml的前面,所以看起来像下面,但响应根本没有改变
...
<MSSLDomainID>test.com</MSSLDomainID>
</xs:complexType>
。。。
test.com
对我应该在这里做什么有什么想法吗?我对Powershell有相当丰富的经验,但是没有一个是关于SOAP的,而且我读过的教程似乎都没有答案。您不发布WSDL。这描述了XML应该是什么样子 您真正需要的是一个XML应该是什么的示例&然后您可以将变量插入其中。您得到的文档描述了订单的格式。实际上没有一个例子。我做了一个快速搜索,但找不到一个适合您的具体需要。从技术上讲,使用WSDL您应该能够构造它 这显示了一些您发布的实际XML示例,但不适用于您的特定API 更新:找到了一个分析WSDL的服务,并为您提供了可以使用的示例XML。看看
使用内置在Powershell中的名为的实用程序,而不是调用web请求。完成后,您将能够看到webservice公开的方法和属性
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl
$Proxy | get-member
Name MemberType Definition
---- ---------- ----------
AddDomainToProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddDomainToProfileCompletedEventHandler AddDomainToProfileCompleted...
AddMSSLDomainCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLDomainCompletedEventHandler AddMSSLDomainCompleted(System.Ob...
AddMSSLProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLProfileCompletedEventHandler AddMSSLProfileCompleted(System....
ChangeSubjectAltNameCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.ChangeSubjectAltNameCompletedEventHandler ChangeSubjectAltNameCompl...
Disposed Event System.EventHandler
$o = new-object ("$proxyType.orderRequestHeader")
$o
AuthToken
---------
PS:\> $p = new-object ("$proxyType.orderRequestParameter")
PS:\> $p
ProductCode :
BaseOption :
OrderKind :
Licenses :
Options :
ValidityPeriod :
CSR :
RenewalTargetOrderID :
TargetCERT :
SpecialInstructions :
Coupon :
Campaign :
$bmv1pvOrderRequest.OrderRequestHeader = $o
$bmv1pvOrderRequest.OrderRequestParameter = $p
$bmv1pvOrderRequest.ContactInfo = $c
使用此代理,我可以通过以下方式从中获取类型:
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl -namespace globalsign -Class managed
$proxyType = $proxy.gettype().Namespace
$bmv1pvOrderRequest = New-Object("$proxyType.BmV1PvOrderRequest")
PS:\> $bmv1pvOrderRequest
OrderRequestHeader :
OrderRequestParameter :
MSSLProfileID :
MSSLDomainID :
SubID :
PVSealInfo :
ContactInfo :
SANEntries :
Extensions :
我选择尝试填写contactinfo其类型为contactinfo,因此您必须创建该类型的对象并填写以下元素:
$C = new-object ("$proxyType.contactinfo")
$C.FirstName = 'thom'
$c.lastname = 'schumacher'
$c
FirstName LastName Phone Email
--------- -------- ----- -----
thom schumacher
接下来,您需要根据需要检查$bmv1pvOrderRequest中的每个项目,并在每个类型中使用一个新的代理,然后将请求发送到Web服务
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl
$Proxy | get-member
Name MemberType Definition
---- ---------- ----------
AddDomainToProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddDomainToProfileCompletedEventHandler AddDomainToProfileCompleted...
AddMSSLDomainCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLDomainCompletedEventHandler AddMSSLDomainCompleted(System.Ob...
AddMSSLProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLProfileCompletedEventHandler AddMSSLProfileCompleted(System....
ChangeSubjectAltNameCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.ChangeSubjectAltNameCompletedEventHandler ChangeSubjectAltNameCompl...
Disposed Event System.EventHandler
$o = new-object ("$proxyType.orderRequestHeader")
$o
AuthToken
---------
PS:\> $p = new-object ("$proxyType.orderRequestParameter")
PS:\> $p
ProductCode :
BaseOption :
OrderKind :
Licenses :
Options :
ValidityPeriod :
CSR :
RenewalTargetOrderID :
TargetCERT :
SpecialInstructions :
Coupon :
Campaign :
$bmv1pvOrderRequest.OrderRequestHeader = $o
$bmv1pvOrderRequest.OrderRequestParameter = $p
$bmv1pvOrderRequest.ContactInfo = $c
WSDL描述了xml应该是什么样子。你的帖子看起来像WSDL。它应该是XML。例如。。。。test.com…为什么不使用新的WebServiceProxy cmdlet创建WebServicesProxy?此cmdlet是为处理基于SOAP的API而构建的。Powershell有一个用于处理WSDL(新WebServicesProxy)的内置cmdlet。感谢您的说明和网站链接,这正是我所需要的。在创建代理时,不要忘记-NameSpace参数,这样您就可以以正常方式访问WSDL端点公开的类。我同意这一点。。我通常使用-namespace和-class,这样我就可以确切地知道我叫它们什么了。。。我确实使用了新的webserviceproxy和gm来查找方法列表,这是我知道PVOrder是我需要的方法的一部分,但这并没有回答我最初的问题,即如何理解XML,除非新的webserviceproxy有办法做到这一点。@bluegrey:到底有什么办法可以找到呢?新的WebServiceProxy将基于WDSL中的XML为您创建所有必需的.NET类:基本上,您不需要从XML中获取任何信息。