Deserialization Problem

Hi,

I have changed an existing webservice to a wcf service. This service is a part of our company framework which we are looking to convert completely to the .net 2.0 framework and possibly using WCF.

Now we use datasets as parameters a lot, and most problems are solved by simply adding the <XMLSerializerFormat()>-attribute.

The problem I have is that there's a particular dataset that cannot be deserialized apparently.

Exceptions and their errormessages:

  • System.ServiceModel.CommunicationException
    Error in deserializing body of request message for operation 'OperationName'.
    • System.InvalidOperationException
      There is an error in the XML document.
      • System.Data.DataException
        Undefined data type: 'xs:string'.

Parts of the serialized xml message:

<query>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Queries">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" msdata:AutoIncrement="true" type="xs:int"></xs:element>
<xs:element name="BuildSQLStatement" type="xs:boolean" default="false"></xs:element>
<xs:element name="StoredProcedureName" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="SQLStatement" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="RelationXSD" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="ResultTableName" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="Limit" type="xs:int" default="-1" minOccurs="0"></xs:element>
<xs:element name="OutputXSD" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="InputParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" type="xs:int"></xs:element>
<xs:element name="ParameterTable" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="ParameterField" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="Operator" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="Value" msdata:DataType="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"type="xs:anyType" minOccurs="0"></xs:element>
<xs:element name="ValueList" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="Index" type="xs:int" default="1" minOccurs="0"></xs:element>
<xs:element name="ConditionOperator" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="ConditionGroup" type="xs:double" default="0" minOccurs="0"></xs:element>
<xs:element name="ConditionType" type="xs:string" default="WHERE" minOccurs="0"></xs:element>
<xs:element name="Operation" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="OutputParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" type="xs:int"></xs:element>
<xs:element name="TableName" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="FieldName" type="xs:string" default="*"></xs:element>
<xs:element name="FieldAlias" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="Aggregate" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="SQLFunction" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="RelationParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" type="xs:int"></xs:element>
<xs:element name="ParentTable" type="xs:string"></xs:element>
<xs:element name="ParentField" type="xs:string"></xs:element>
<xs:element name="ChildTable" type="xs:string"></xs:element>
<xs:element name="ChildField" type="xs:string"></xs:element>
<xs:element name="SQLJoin" type="xs:string" default="INNER"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GroupParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" type="xs:int"></xs:element>
<xs:element name="TableName" type="xs:string"></xs:element>
<xs:element name="FieldName" type="xs:string"></xs:element>
<xs:element name="Index" type="xs:short"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="OrderByParameters">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryID" type="xs:int"></xs:element>
<xs:element name="TableName" type="xs:string"></xs:element>
<xs:element name="FieldName" type="xs:string"></xs:element>
<xs:element name="Index" type="xs:short"></xs:element>
<xs:element name="Direction" type="xs:string" default="ASC"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1">
<xs:selector xpath=".//Queries"></xs:selector>
<xs:field xpath="QueryID"></xs:field>
</xs:unique>
</xs:element>
<xs:annotation>
<xs:appinfo>
<msdata:Relationship name="InputParametersForQuery" msdata:parent="Queries" msdata:child="InputParameters" msdata:parentkey="QueryID" msdata:childkey="QueryID"></msdata:Relationship>
<msdata:Relationship name="OutputParametersForQuery" msdata:parent="Queries" msdata:child="OutputParameters" msdata:parentkey="QueryID" msdata:childkey="QueryID"></msdata:Relationship>
<msdata:Relationship name="RelationsForQuery" msdata:parent="Queries" msdata:child="RelationParameters" msdata:parentkey="QueryID" msdata:childkey="QueryID"></msdata:Relationship>
<msdata:Relationship name="GroupingForQueries" msdata:parent="Queries" msdata:child="GroupParameters" msdata:parentkey="QueryID" msdata:childkey="QueryID"></msdata:Relationship>
<msdata:Relationship name="SortingForQueries" msdata:parent="Queries" msdata:child="OrderByParameters" msdata:parentkey="QueryID" msdata:childkey="QueryID"></msdata:Relationship>
</xs:appinfo>
</xs:annotation>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<NewDataSet xmlns="">
<Queries diffgr:id="Queries1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<QueryID>0</QueryID>
<BuildSQLStatement>true</BuildSQLStatement>
<ResultTableName>SB_ZipCodes</ResultTableName>
<Limit>-1</Limit>
</Queries>
<InputParameters diffgr:id="InputParameters1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<QueryID>0</QueryID>
<ParameterField>ZipId</ParameterField>
<Operator>=</Operator>
<Valuexsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2902</Value>
<Index>3</Index>
<ConditionGroup>0</ConditionGroup>
<ConditionType>WHERE</ConditionType>
</InputParameters>
<OutputParameters diffgr:id="OutputParameters1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<QueryID>0</QueryID>
<TableName>SB_ZipCodes</TableName>
<FieldName>*</FieldName>
</OutputParameters>
<OutputParameters diffgr:id="OutputParameters2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
<QueryID>0</QueryID>
<TableName>SB_Countries</TableName>
<FieldName>Description</FieldName>
</OutputParameters>
<RelationParameters diffgr:id="RelationParameters1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<QueryID>0</QueryID>
<ParentTable>SB_ZipCodes</ParentTable>
<ParentField>CountryId</ParentField>
<ChildTable>SB_Countries</ChildTable>
<ChildField>CountryCode</ChildField>
<SQLJoin>INNER</SQLJoin>
</RelationParameters>
</NewDataSet>
</diffgr:diffgram>
</query>

I located where deserializatoin goes wrong:

There's a column with type 'AnyType' and when trying to deserialize it goes wrong on that column. It doesn't mather what type is actually in there. When i put an integer in it instead of a string, I get the error 'Undefined data type: 'xs:int'.'

Complete StackTrace for the exception:

<Exception>
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Error in deserializing body of request message for operation 'RetrieveByQuery'.</Message>
<StackTrace>
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
at System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)
at System.ServiceModel.Diagnostics.Utility.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)
at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state)
at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state)
at System.ServiceModel.Channels.StreamConnection.OnRead(IAsyncResult result)
at System.ServiceModel.Diagnostics.Utility.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest)
at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result)
at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes)
at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult)
at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)
at System.ServiceModel.Channels.ConnectionStream.ReadAsyncResult.OnAsyncReadComplete(Object state)
at System.ServiceModel.Channels.TracingConnection.TracingConnectionState.ExecuteCallback()
at System.ServiceModel.Channels.TracingConnection.WaitCallback(Object state)
at System.ServiceModel.Channels.SocketConnection.FinishRead()
at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead)
at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
</StackTrace>
<ExceptionString>System.ServiceModel.CommunicationException: Error in deserializing body of request message for operation 'RetrieveByQuery'. &gt; System.InvalidOperationException: There is an error in the XML document. &gt; System.Data.DataException: Undefined data type: 'xs:string'.
at System.Data.XSDSchema.XsdtoClr(String xsdTypeName)
at System.Data.Common.ObjectStorage.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.DataColumn.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.XmlDataLoader.LoadColumn(DataColumn column, Object[] foundColumns)
at System.Data.XmlDataLoader.LoadTable(DataTable table, Boolean isNested)
at System.Data.XmlDataLoader.LoadData(XmlReader reader)
at System.Data.DataSet.ReadXmlDiffgram(XmlReader reader)
at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
at System.Data.DataSet.ReadXmlSerializable(XmlReader reader)
at System.Data.DataSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSecureFacade.Read20_RetrieveByQuery()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer16.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
End of inner exception stack trace
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
End of inner exception stack trace </ExceptionString>
<InnerException>
<ExceptionType>System.InvalidOperationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>There is an error in the XML document.</Message>
<StackTrace>
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
</StackTrace>
<ExceptionString>System.InvalidOperationException: There is an error in the XML document. &gt; System.Data.DataException: Undefined data type: 'xs:string'.
at System.Data.XSDSchema.XsdtoClr(String xsdTypeName)
at System.Data.Common.ObjectStorage.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.DataColumn.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.XmlDataLoader.LoadColumn(DataColumn column, Object[] foundColumns)
at System.Data.XmlDataLoader.LoadTable(DataTable table, Boolean isNested)
at System.Data.XmlDataLoader.LoadData(XmlReader reader)
at System.Data.DataSet.ReadXmlDiffgram(XmlReader reader)
at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
at System.Data.DataSet.ReadXmlSerializable(XmlReader reader)
at System.Data.DataSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSecureFacade.Read20_RetrieveByQuery()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer16.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
End of inner exception stack trace
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)</ExceptionString>
<InnerException>
<ExceptionType>System.Data.DataException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Undefined data type: 'xs:string'.</Message>
<StackTrace>
at System.Data.XSDSchema.XsdtoClr(String xsdTypeName)
at System.Data.Common.ObjectStorage.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.DataColumn.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.XmlDataLoader.LoadColumn(DataColumn column, Object[] foundColumns)
at System.Data.XmlDataLoader.LoadTable(DataTable table, Boolean isNested)
at System.Data.XmlDataLoader.LoadData(XmlReader reader)
at System.Data.DataSet.ReadXmlDiffgram(XmlReader reader)
at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
at System.Data.DataSet.ReadXmlSerializable(XmlReader reader)
at System.Data.DataSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSecureFacade.Read20_RetrieveByQuery()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer16.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
</StackTrace>
<ExceptionString>System.Data.DataException: Undefined data type: 'xs:string'.
at System.Data.XSDSchema.XsdtoClr(String xsdTypeName)
at System.Data.Common.ObjectStorage.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.DataColumn.ConvertXmlToObject(XmlReader xmlReader, XmlRootAttribute xmlAttrib)
at System.Data.XmlDataLoader.LoadColumn(DataColumn column, Object[] foundColumns)
at System.Data.XmlDataLoader.LoadTable(DataTable table, Boolean isNested)
at System.Data.XmlDataLoader.LoadData(XmlReader reader)
at System.Data.DataSet.ReadXmlDiffgram(XmlReader reader)
at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
at System.Data.DataSet.ReadXmlSerializable(XmlReader reader)
at System.Data.DataSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSecureFacade.Read20_RetrieveByQuery()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer16.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)</ExceptionString>
</InnerException>
</InnerException>
</Exception>

Anybody any ideas on how to solve this? And don't say: do not use datasets...

[24599 byte] By [DeBiese] at [2007-12-22]

Visual Studio Orcas

Site Classified