Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=77297 --- shadow/77297 2006-01-18 12:04:45.000000000 -0500 +++ shadow/77297.tmp.15058 2006-01-18 12:04:45.000000000 -0500 @@ -0,0 +1,350 @@ +Bug#: 77297 +Product: Mono: Class Libraries +Version: 1.1 +OS: +OS Details: ubuntu 5.10 +Status: NEW +Resolution: +Severity: +Priority: Normal +Component: Sys.Web.Services +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: stub generated from wsdl raises InvalidCastException exception on a dynamic array transfered by the webservice + +Description of Problem: +I've used gSOAP to build a webservice and generate the corresponding wsdl : +*************************************************************************** +<?xml version="1.0" encoding="UTF-8"?> +<definitions name="quelisapi" + targetNamespace="urn:QuelisReader" + xmlns:tns="urn:QuelisReader" + xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" + xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:api="urn:QuelisReader" + xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/" + xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/" + xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/" + xmlns="http://schemas.xmlsoap.org/wsdl/"> + +<types> + + <schema targetNamespace="urn:QuelisReader" + xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" + xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:api="urn:QuelisReader" + xmlns="http://www.w3.org/2001/XMLSchema" + elementFormDefault="unqualified" + attributeFormDefault="unqualified"> + <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> + <simpleType name="boolean"> + <restriction base="xsd:string"> + <enumeration value="false"/> + <enumeration value="true"/> + </restriction> + </simpleType> + <complexType name="TagId"> + <sequence> + <element name="uid" type="xsd:string" minOccurs="0" maxOccurs="1" +nillable="true"/> + <element name="readings" type="xsd:int" minOccurs="1" maxOccurs="1"/> + </sequence> + </complexType> + <complexType name="TagIdArray"> + <sequence> + <element name="item" type="api:TagId" minOccurs="0" +maxOccurs="unbounded" nillable="true"/> + </sequence> + </complexType> + </schema> + +</types> + +<message name="getReaderConfig"> +</message> + +<message name="ReaderConfig"> + <part name="name" type="xsd:string"/> + <part name="version" type="xsd:string"/> + <part name="interrogators" type="xsd:int"/> + <part name="multiplex" type="xsd:int"/> + <part name="inputs" type="xsd:int"/> + <part name="outputs" type="xsd:int"/> + <part name="scanningTime" type="xsd:int"/> + <part name="ready" type="xsd:boolean"/> + <part name="scanning" type="xsd:boolean"/> +</message> + +<message name="setScanningTimeRequest"> + <part name="scanningTime" type="xsd:int"/> +</message> + +<message name="setScanningTimeResponse"> + <part name="return" type="xsd:boolean"/> +</message> + +<message name="getReaderStatusRequest"> +</message> + +<message name="getReaderStatusResponse"> + <part name="return" type="xsd:boolean"/> +</message> + +<message name="startScanningRequest"> +</message> + +<message name="startScanningResponse"> + <part name="return" type="xsd:boolean"/> +</message> + +<message name="stopScanningRequest"> +</message> + +<message name="stopScanningResponse"> + <part name="return" type="xsd:boolean"/> +</message> + +<message name="getTagIdList"> + <part name="blocking" type="xsd:boolean"/> + <part name="timeout" type="xsd:long"/> +</message> + +<message name="TagIdList"> + <part name="tagIdArray" type="api:TagIdArray"/> + <part name="scanning" type="xsd:boolean"/> +</message> + +<portType name="quelisapiPortType"> + <operation name="getReaderConfig"> + <documentation>Service definition of function +api__getReaderConfig</documentation> + <input message="tns:getReaderConfig"/> + <output message="tns:ReaderConfig"/> + </operation> + <operation name="setScanningTime"> + <documentation>Service definition of function +api__setScanningTime</documentation> + <input message="tns:setScanningTimeRequest"/> + <output message="tns:setScanningTimeResponse"/> + </operation> + <operation name="getReaderStatus"> + <documentation>Service definition of function +api__getReaderStatus</documentation> + <input message="tns:getReaderStatusRequest"/> + <output message="tns:getReaderStatusResponse"/> + </operation> + <operation name="startScanning"> + <documentation>Service definition of function +api__startScanning</documentation> + <input message="tns:startScanningRequest"/> + <output message="tns:startScanningResponse"/> + </operation> + <operation name="stopScanning"> + <documentation>Service definition of function +api__stopScanning</documentation> + <input message="tns:stopScanningRequest"/> + <output message="tns:stopScanningResponse"/> + </operation> + <operation name="getTagIdList"> + <documentation>Service definition of function +api__getTagIdList</documentation> + <input message="tns:getTagIdList"/> + <output message="tns:TagIdList"/> + </operation> +</portType> + +<binding name="quelisapi" type="tns:quelisapiPortType"> + <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> + <operation name="getReaderConfig"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + <operation name="setScanningTime"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + <operation name="getReaderStatus"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + <operation name="startScanning"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + <operation name="stopScanning"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + <operation name="getTagIdList"> + <SOAP:operation style="rpc" soapAction=""/> + <input> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <SOAP:body use="encoded" namespace="urn:QuelisReader" +encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> +</binding> + +<service name="quelisapi"> + <documentation>gSOAP 2.7.6c generated service definition</documentation> + <port name="quelisapi" binding="tns:quelisapi"> + <SOAP:address location="http://api.quelisid.com"/> + </port> +</service> + +</definitions> +************************************************************************** + +From this wsdl I've created a client stub with Mono "wsdl" tools. When +using this stub class a System.InvalidCastException is raised when the stub +remote function getTagIdList is called. Note that all other remote +functions work without a glitch. + +The transfered object in the getTagIdList fuction is a "dynamic array of +struct" ("TagIdList" in the wsdl file). This kind of object seems to be +poorly supportded in SOAP implementations other than gSOAP. + +I've also generated the stub with MS.Net tools. The MS.Net generated class +was simmilar but raised no exception. On the other hand MS.Net generated +stub did not receive the array correctly either, it always receive a null +array but the "scanning" parameter is received correctly. + +I've sniffed the HTTP packets during the array transfert and I've seen that +the array seems to be correcty serialised and is not empty : +************************************************************************** +0000 00 0e a6 9e 8a 6a 00 14 fb 00 00 33 08 00 45 00 .....j.. ...3..E. +0010 03 e0 4a 6b 40 00 40 06 68 28 c0 a8 01 ea c0 a8 [EMAIL PROTECTED]@. h(...... +0020 01 4a 1f 90 e1 e0 78 9e d1 5a ed 97 c4 f2 80 18 .J....x. .Z...... +0030 0f 80 56 0f 00 00 01 01 08 0a 00 7e 9b 24 05 3c ..V..... ...~.$.< +0040 06 57 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f .WHTTP/1 .1 200 O +0050 4b 0d 0a 53 65 72 76 65 72 3a 20 67 53 4f 41 50 K..Serve r: gSOAP +0060 2f 32 2e 37 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 /2.7..Co ntent-Ty +0070 70 65 3a 20 74 65 78 74 2f 78 6d 6c 3b 20 63 68 pe: text /xml; ch +0080 61 72 73 65 74 3d 75 74 66 2d 38 0d 0a 43 6f 6e arset=ut f-8..Con +0090 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 38 32 33 tent-Len gth: 823 +00a0 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c ..Connec tion: cl +00b0 6f 73 65 0d 0a 0d 0a 3c 3f 78 6d 6c 20 76 65 72 ose....< ?xml ver +00c0 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 sion="1. 0" encod +00d0 69 6e 67 3d 22 55 54 46 2d 38 22 3f 3e 0a 3c 53 ing="UTF -8"?>.<S +00e0 4f 41 50 2d 45 4e 56 3a 45 6e 76 65 6c 6f 70 65 OAP-ENV: Envelope +00f0 20 78 6d 6c 6e 73 3a 53 4f 41 50 2d 45 4e 56 3d xmlns:S OAP-ENV= +0100 22 68 74 74 70 3a 2f 2f 73 63 68 65 6d 61 73 2e "http:// schemas. +0110 78 6d 6c 73 6f 61 70 2e 6f 72 67 2f 73 6f 61 70 xmlsoap. org/soap +0120 2f 65 6e 76 65 6c 6f 70 65 2f 22 20 78 6d 6c 6e /envelop e/" xmln +0130 73 3a 53 4f 41 50 2d 45 4e 43 3d 22 68 74 74 70 s:SOAP-E NC="http +0140 3a 2f 2f 73 63 68 65 6d 61 73 2e 78 6d 6c 73 6f ://schem as.xmlso +0150 61 70 2e 6f 72 67 2f 73 6f 61 70 2f 65 6e 63 6f ap.org/s oap/enco +0160 64 69 6e 67 2f 22 20 78 6d 6c 6e 73 3a 78 73 69 ding/" x mlns:xsi +0170 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e ="http:/ /www.w3. +0180 6f 72 67 2f 32 30 30 31 2f 58 4d 4c 53 63 68 65 org/2001 /XMLSche +0190 6d 61 2d 69 6e 73 74 61 6e 63 65 22 20 78 6d 6c ma-insta nce" xml +01a0 6e 73 3a 78 73 64 3d 22 68 74 74 70 3a 2f 2f 77 ns:xsd=" http://w +01b0 77 77 2e 77 33 2e 6f 72 67 2f 32 30 30 31 2f 58 ww.w3.or g/2001/X +01c0 4d 4c 53 63 68 65 6d 61 22 20 78 6d 6c 6e 73 3a MLSchema " xmlns: +01d0 61 70 69 3d 22 75 72 6e 3a 51 75 65 6c 69 73 52 api="urn :QuelisR +01e0 65 61 64 65 72 22 3e 3c 53 4f 41 50 2d 45 4e 56 eader">< SOAP-ENV +01f0 3a 42 6f 64 79 20 53 4f 41 50 2d 45 4e 56 3a 65 :Body SO AP-ENV:e +0200 6e 63 6f 64 69 6e 67 53 74 79 6c 65 3d 22 68 74 ncodingS tyle="ht +0210 74 70 3a 2f 2f 73 63 68 65 6d 61 73 2e 78 6d 6c tp://sch emas.xml +0220 73 6f 61 70 2e 6f 72 67 2f 73 6f 61 70 2f 65 6e soap.org /soap/en +0230 63 6f 64 69 6e 67 2f 22 3e 3c 61 70 69 3a 54 61 coding/" ><api:Ta +0240 67 49 64 4c 69 73 74 3e 3c 74 61 67 49 64 41 72 gIdList> <tagIdAr +0250 72 61 79 3e 3c 69 74 65 6d 3e 3c 75 69 64 3e 30 ray><ite m><uid>0 +0260 78 30 31 30 30 30 30 30 35 44 37 46 32 45 44 42 x0100000 5D7F2EDB +0270 44 3c 2f 75 69 64 3e 3c 72 65 61 64 69 6e 67 73 D</uid>< readings +0280 3e 31 3c 2f 72 65 61 64 69 6e 67 73 3e 3c 2f 69 >1</read ings></i +0290 74 65 6d 3e 3c 69 74 65 6d 3e 3c 75 69 64 3e 30 tem><ite m><uid>0 +02a0 78 30 31 30 30 30 30 30 35 44 38 43 35 42 42 33 x0100000 5D8C5BB3 +02b0 37 3c 2f 75 69 64 3e 3c 72 65 61 64 69 6e 67 73 7</uid>< readings +02c0 3e 31 3c 2f 72 65 61 64 69 6e 67 73 3e 3c 2f 69 >1</read ings></i +02d0 74 65 6d 3e 3c 69 74 65 6d 3e 3c 75 69 64 3e 30 tem><ite m><uid>0 +02e0 78 30 31 30 30 30 30 30 35 44 41 35 45 45 46 38 x0100000 5DA5EEF8 +02f0 37 3c 2f 75 69 64 3e 3c 72 65 61 64 69 6e 67 73 7</uid>< readings +0300 3e 31 3c 2f 72 65 61 64 69 6e 67 73 3e 3c 2f 69 >1</read ings></i +0310 74 65 6d 3e 3c 69 74 65 6d 3e 3c 75 69 64 3e 30 tem><ite m><uid>0 +0320 78 30 31 30 30 30 30 30 35 44 41 42 37 38 33 38 x0100000 5DAB7838 +0330 30 3c 2f 75 69 64 3e 3c 72 65 61 64 69 6e 67 73 0</uid>< readings +0340 3e 31 3c 2f 72 65 61 64 69 6e 67 73 3e 3c 2f 69 >1</read ings></i +0350 74 65 6d 3e 3c 69 74 65 6d 3e 3c 75 69 64 3e 30 tem><ite m><uid>0 +0360 78 30 31 30 30 30 30 30 35 44 42 31 46 38 34 35 x0100000 5DB1F845 +0370 33 3c 2f 75 69 64 3e 3c 72 65 61 64 69 6e 67 73 3</uid>< readings +0380 3e 31 3c 2f 72 65 61 64 69 6e 67 73 3e 3c 2f 69 >1</read ings></i +0390 74 65 6d 3e 3c 2f 74 61 67 49 64 41 72 72 61 79 tem></ta gIdArray +03a0 3e 3c 73 63 61 6e 6e 69 6e 67 3e 74 72 75 65 3c ><scanni ng>true< +03b0 2f 73 63 61 6e 6e 69 6e 67 3e 3c 2f 61 70 69 3a /scannin g></api: +03c0 54 61 67 49 64 4c 69 73 74 3e 3c 2f 53 4f 41 50 TagIdLis t></SOAP +03d0 2d 45 4e 56 3a 42 6f 64 79 3e 3c 2f 53 4f 41 50 -ENV:Bod y></SOAP +03e0 2d 45 4e 56 3a 45 6e 76 65 6c 6f 70 65 3e -ENV:Env elope> +************************************************************************** + +Steps to reproduce the problem: +1. Generate the gSOAP webservice and wsdl file +2. Generate the stub from the wsdl file with Mono "wsdl" utility +3. Call the getTagIdList remote method + +Actual Results: +System.InvalidCastException raised while receiving a dynamic array of struct. + +Expected Results: +Receiving correctly this kind of serialized objects. + +How often does this happen? +Each time I call the problematic remote funciton + +Additional Information: + +To investigate on the point I would suggest to create a simple webservice +with a remote function returning a "dynamic array of struct" similar to +mine and studdy how the Mono generated Stub deserializes it. + +This pb may also come from a bad interoperablility between gSOAP and Mono +SOAP for this kind of objects. The folliwing link summarizes the +interoperability between gSOAP and other SOAP implementations : +http://www.cs.fsu.edu/~engelen/interop11/interop2results.html. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
