我目前正在处理SOAP项目。我使用Python来公开soap服务,项目的WSDL是here。
当我使用Soap UI从wsdl生成示例请求时,结果正如我所期望的那样:
请求1
<soapenv:Body>
<urn:SendSimpleSMS soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<req xsi:type="urn:SimpleSMSRequest">
<contactsid xsi:type="xsd:string">?</contactsid>
<messages xsi:type="urn:ArrayOfSimpleSMSRequestMessage">
<item xsi:type="urn:SimpleSMSRequestMessage">
<body xsi:type="xsd:string">?</body>
<senderid xsi:type="xsd:string">?</senderid>
<to xsi:type="xsd:string">?</to>
</item>
</messages>
<password xsi:type="xsd:string">?</password>
<scheduleddatetime xsi:type="xsd:string">?</scheduleddatetime>
<templateid xsi:type="xsd:string">?</templateid>
<username xsi:type="xsd:string">?</username>
</req>
</urn:SendSimpleSMS>
</soapenv:Body>
但是,今天我从一些客户那里得到了他们正在使用的工具(.NET驱动的东西)的报告,从WSDL创建了一个不起作用的样本请求。然后我尝试了一些工具(Storm,Webservice studio),这两个工具都会产生以下请求:
请求2:
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:SendSimpleSMS>
<req href="#id1" />
</tns:SendSimpleSMS>
<tns:SimpleSMSRequest id="id1" xsi:type="tns:SimpleSMSRequest">
<contactsid xsi:type="xsd:string" />
<messages href="#id2" />
<password xsi:type="xsd:string" />
<scheduleddatetime xsi:type="xsd:string" />
<templateid xsi:type="xsd:string" />
<username xsi:type="xsd:string" />
</tns:SimpleSMSRequest>
<tns:ArrayOfSimpleSMSRequestMessage id="id2" xsi:type="tns:ArrayOfSimpleSMSRequestMessage">
<message href="#id3" />
</tns:ArrayOfSimpleSMSRequestMessage>
<soapenc:Array id="id3" soapenc:arrayType="tns:SimpleSMSRequestMessage[1]">
<Item href="#id4" />
</soapenc:Array>
<tns:SimpleSMSRequestMessage id="id4" xsi:type="tns:SimpleSMSRequestMessage">
<body xsi:type="xsd:string" />
<senderid xsi:type="xsd:string" />
<to xsi:type="xsd:string" />
</tns:SimpleSMSRequestMessage>
</soap:Body>
我的肥皂库拒绝了第二个请求。我也很难理解第二个请求 - 这是如何有效的?
我的意思是,WSDL说元素中会有一个元素。但第二个请求显然不符合这种语法。
我对SOAP很新,所以请帮我查一下第二个请求是否有效。如果是,如果由于不同的SOAP版本而有效?也许请指点一些文档来了解第二个请求是如何有效的。
由于