我正在通过 .Net 解决方案调用第三方的 AXIS Web 服务
通过以下 WSDL 文件向我的 VS 项目添加了服务参考(服务位置已被删除,因为它是一种受限使用)
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
name="PremiumCharging"
targetNamespace="http://premiumcharging.verisign.com"
xmlns:pmg="http://types.premiumcharging.verisign.com"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://premiumcharging.verisign.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema
targetNamespace="http://types.premiumcharging.verisign.com"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:pmg="http://types.premiumcharging.verisign.com"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="UserInfo">
<xsd:sequence>
<xsd:element name="aggregatorId" type="xsd:int"/>
<xsd:element name="pwd" type="xsd:string"/>
<xsd:element name="version" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="StatusInfo">
<xsd:sequence>
<xsd:element name="errorCode" type="xsd:int"/>
<xsd:element name="errorDescription" type="xsd:string"/>
<xsd:element name="transactionId" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="chargeSubscriberResponse">
<wsdl:part name="chargeSubscriberReturn" type="pmg:StatusInfo"/>
</wsdl:message>
<wsdl:message name="chargeSubscriberRequest">
<wsdl:part name="user" type="pmg:UserInfo"/>
<wsdl:part name="mdn" type="xsd:string"/>
<wsdl:part name="productId" type="xsd:string"/>
<wsdl:part name="shortCode" type="xsd:string"/>
<wsdl:part name="carrierId" type="xsd:int"/>
<wsdl:part name="chargeId" type="xsd:string"/>
<wsdl:part name="msgtxid" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="PremiumChargingPortType">
<wsdl:operation name="chargeSubscriber">
<wsdl:input message="tns:chargeSubscriberRequest"/>
<wsdl:output message="tns:chargeSubscriberResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PremiumChargingBinding" type="tns:PremiumChargingPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="chargeSubscriber">
<soap:operation/>
<wsdl:input>
<soap:body parts="user mdn productId shortCode carrierId chargeId msgtxid" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="chargeSubscriberReturn" use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PremiumCharging">
<wsdl:port binding="tns:PremiumChargingBinding" name="PremiumChargingPort">
<soap:address location="...location removed..."/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我能够生成请求并接收响应(通过 Fiddler 捕获),但是在调用“chargeSubscriber”之后创建了实际响应对象(typeof StatusInfo),但值为零(对于 int 属性)和空字符串(对于字符串属性.)
这是在 Fiddler 中捕获的响应 XML 的示例:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<chargeSubscriberResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<chargeSubscriberReturn href="#id0"/>
</chargeSubscriberResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns1:StatusInfo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://types.premiumcharging.verisign.com">
<errorCode href="#id1"/>
<errorDescription xsi:type="soapenc:string">Non-Carrier MIN</errorDescription>
<transactionId href="#id2"/>
</multiRef>
<multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">2216</multiRef>
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">-105</multiRef>
</soapenv:Body>
</soapenv:Envelope>
我已经读过某些命名空间和命名引用不匹配可能是一个问题,但我无法找到哪个。任何帮助表示赞赏。