Interop between PEAR-SOAP and Visual Studio - complex types
| From: | Artyom Kamshilin | Date: | Fri, 21 Oct 2005 09:32:13 +0000 |
| Subject: | Interop between PEAR-SOAP and Visual Studio - complex types | ||
| Groups: | php.pear.general | ||
| Request: | Send a blank email to pear-general+get-21576@lists.php.net to get a copy of this message | ||
Hi everybody,
I try to register a complex type in PEAR-SOAP (array of integers), here's
the resulting WSDL:
<?xml version="1.0"?><definitions name="localhost"
targetNamespace="urn:localhost"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="urn:localhost"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types xmlns="http://schemas.xmlsoap.org/wsdl/">
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:localhost">
<complexType name="dataObj">
<complexContent>
<restriction base="SOAP-ENC:Array">
<attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:int[]" />
</restriction>
</complexContent>
</complexType>
</schema>
</types>
<message name="retObjRequest" />
<message name="retObjResponse">
<part name="return" type="xsd:dataObj" />
</message>
<portType name="localhostPort">
<operation name="retObj">
<input message="tns:retObjRequest" />
<output message="tns:retObjResponse" />
</operation>
</portType>
<binding name="localhostBinding" type="tns:localhostPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"
/>
<operation name="retObj">
<soap:operation
soapAction="http://schemas.xmlsoap.org/soap/envelope/#ivwebservice#retObj"
/>
<input>
<soap:body use="encoded"
namespace="http://schemas.xmlsoap.org/soap/envelope/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</input>
<output>
<soap:body use="encoded"
namespace="http://schemas.xmlsoap.org/soap/envelope/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</output>
</operation>
</binding>
<service name="localhostService">
<documentation />
<port name="localhostPort" binding="tns:localhostBinding">
<soap:address location="http://localhost/code/web_service.php"
/>
</port>
</service>
</definitions>
But when this WSDL is fed into Visual Studio 2003, retObj() method is
declared as "public string retObj()" - and of course fails because returned
type (array of int) cannot be cast to a string.
I have this problem with all other registered types as well - Visual Studio
simply uses string for anything except basic types like "int", "float" etc.
Is there a way to make Visual Studio understand complex types? I'd really
appreciate any help.
Artyom