I’m calling a third party’s AXIS web service via a .Net solution
Added the Service Reference to my VS Project via following WSDL file (service location has been removed, since it is a restricted usage)
<?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>
I am able to generate a request and receive a response (captured via Fiddler), but the actual response object (typeof StatusInfo) after calling “chargeSubscriber” is created but with zero values (for int properties) and empty string (for the string property.)
This is an example of the response XML captured in Fiddler:
<?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>
I have read that certain namespace and naming reference mismatch could be an issue, but I’m unable to locate which. Any help is appreciated.
I was able to manipulate the response by creating a Client Message Inspector as described here:
How to Get Around WCFs Lack of a preview
Together with @SixtoSeaz suggested SO Answer:
SO Answer
And in the method “AfterReceiveReply” of the Client Message Inspector I changed the SOAP response by assigning the InnerXml on each node that referenced a multiRef item. Then the StatusInfo response object did get the correct values populated as needed.
Behavior and ClientMessageInspector:
And then assign the Behavior to the EndPoint (Service Reference is PMGReference)