NuSphere Forums Forum Index
NuSphere Forums
Reply to topic
Complex data types not recognized by ASP.NET SOAP clients


Joined: 21 Aug 2007
Posts: 1
Reply with quote
Hello,

I have been working on a SOAP server that returns some complex data types. Here is how I have defined the data types:
Code:

require 'nusoap/nusoap.php';

$server = new soap_server();
$NAMESPACE = 'http://eorthopod.com/services/EorthoContent';
$server->configureWSDL('EorthoContent', $NAMESPACE);
$server->wsdl->schemaTargetNamespace = $NAMESPACE;

// Begin complex type definitions
$server->wsdl->addComplexType(
    'ArrayOf_xsd_string',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType',
              'wsdl:arrayType'=>'xsd:string[]'))
);

// ---- ArrayOf_xsd_string[] (ArrayOfArrayOf_xsd_string) -------------------------------
$server->wsdl->addComplexType(
    'ArrayOfArrayOf_xsd_string',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ArrayOf_xsd_string[]')
    ),
    'tns:ArrayOf_xsd_string'
);


Now, the complex types seem to be received fine when called by a PHP based SOAP client (nusoap or built-in SOAP in php5), but when trying to interpret the complex types in ASP.NET, I get the following error:
Code:

[InvalidOperationException: The specified type was not recognized: name='ArrayOf_xsd_string', namespace='http://eorthopod.com/services/EorthoContent', at <return xmlns=''>.]
   System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(XmlQualifiedName typeName, Boolean throwOnUnknown) +695111
   System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs) +459
   System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference) +371
   System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference) +14
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderEorthoContentService.Read3_getProvidersResponse() +478
   Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Deserialize(XmlSerializationReader reader) +40
   System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) +161

[InvalidOperationException: There is an error in XML document (1, 489).]
   System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) +637
   System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) +32
   System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) +1143
   System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) +204
   EorthoContentService.getProviders(String clinicGUID) +47
   patient_edu.BindProviders() +118
   patient_edu.Page_Load(Object sender, EventArgs e) +30
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061


Here is what the WSDL file looks like:
Code:

<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://eorthopod.com/services/EorthoContent" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://eorthopod.com/services/EorthoContent">
<types><xsd:schema targetNamespace="http://eorthopod.com/services/EorthoContent"
>
 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
 <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
 <xsd:complexType name="ArrayOf_xsd_string">
  <xsd:complexContent>
   <xsd:restriction base="SOAP-ENC:Array">
    <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/>
   </xsd:restriction>
  </xsd:complexContent>
 </xsd:complexType>
 <xsd:complexType name="ArrayOfArrayOf_xsd_string">
  <xsd:complexContent>
   <xsd:restriction base="SOAP-ENC:Array">
    <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:ArrayOf_xsd_string[]"/>
   </xsd:restriction>
  </xsd:complexContent>
 </xsd:complexType>
</xsd:schema>
</types>

...and then the function stuff starts.

Can anyone help me figure out why ASP.NET can't recognize the complex type ArrayOf_xsd_string?

Any help would be much appreciated.

Thanks,
Matt
View user's profileFind all posts by mmlr38Send private message
Complex data types not recognized by ASP.NET SOAP clients
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
All times are GMT - 5 Hours  
Page 1 of 1  

  
  
 Reply to topic