I have a WCF service in place.
Normal operation would see the server doing some processing the returning a populated XactTaskIn object to the client via a callback. I have this working ok.
My problem is that when I try and set the returnData variable to a populated XactException and try to send the XactTaskIn back to the client via the callback, I get the following exception thrown.
Exception - "Type 'XactException' with
data contract name
'XactException:http://schemas.datacontract.org/2004/07/'
is not expected. Consider using a
DataContractResolver or add any types
not known statically to the list of
known types - for example, by using
the KnownTypeAttribute attribute or by
adding them to the list of known types
passed to DataContractSerializer."
(System.Runtime.Serialization.SerializationException) Exception
Message = "Type 'XactException' with
data contract name
'XactException:http://schemas.datacontract.org/2004/07/'
is not expected. Consider using a
DataContractResolver or add any types
not known statically to the list of
known types - for example, by using
the KnownTypeAttribute attribute or by
adding them to the list of known types
passed to DataContractSerializer.",
Exception Type =
"System.Runtime.Serialization.SerializationException"
Here is the XactTaskIn class
[DataContract]
public class XactTaskIn
{
[DataMember]
public DateTime timeOut;
[DataMember]
public DateTime timeIn;
[DataMember]
public string name;
[DataMember]
public string responseTo;
[DataMember]
public String moduleFromName;
[DataMember]
public String moduleFromType;
[DataMember]
public String methodFromName;
[DataMember]
public object[] originalInputs;
[DataMember]
public String returnMethodToCall;
[DataMember]
public String returnModuleToCall;
[DataMember]
public object returnData;
public XactTaskIn(DateTime timeOut, DateTime timeIn, string name, string responseTo, String moduleFromName, String moduleFromType, String methodFromName, object[] originalInputs, String returnMethodToCall, String returnModuleToCall, object returnData)
{
this.timeOut = timeOut;
this.timeIn = timeIn;
this.name = name;
this.responseTo = responseTo;
this.moduleFromName = moduleFromName;
this.moduleFromType = moduleFromType;
this.methodFromName = methodFromName;
this.originalInputs = originalInputs;
this.returnMethodToCall = returnMethodToCall;
this.returnModuleToCall = returnModuleToCall;
this.returnData = returnData;
}
}
Here is the XactException class:
[DataContract]
public class XactException
{
[DataMember]
string message;
public XactException(string message)
{
this.message = message;
// Add implementation.
}
}
Update:
Ok so the comment from Daniel has helped me.
It looks now like the server is sending the callback to the client, but the client is throwing the following exception.
- Caught: "The formatter threw an exception while trying to deserialize
the message: There was an error while
trying to deserialize parameter
http://tempuri.org/:taskIn. The
InnerException message was 'Error in
line 1 position 960. Element
'http://schemas.datacontract.org/2004/07/:returnData'
contains data from a type that maps to
the name
'http://schemas.datacontract.org/2004/07/:XactException'.
The deserializer has no knowledge of
any type that maps to this name.
Consider using a DataContractResolver
or add the type corresponding to
'XactException' to the list of known
types - for example, by using the
KnownTypeAttribute attribute or by
adding it to the list of known types
passed to DataContractSerializer.'.
Please see InnerException for more
details."
(System.ServiceModel.Dispatcher.NetDispatcherFaultException) Exception
Message = "The formatter threw an
exception while trying to deserialize
the message: There was an error while
trying to deserialize parameter
http://tempuri.org/:taskIn. The
InnerException message was 'Error in
line 1 position 960. Element
'http://schemas.datacontract.org/2004/07/:returnData'
contains data from a type that maps to
the name
'http://schemas.datacontract.org/2004/07/:XactException'.
The deserializer has no knowledge of
any type that maps to this name.
Consider using a DataContractResolver
or add the type corresponding to
'XactException' to the list of known
types - for example, by using the
KnownTypeAttribute attribute or by
adding it to the list of known types
passed to DataContractSerializer.'.
Please see InnerException for more
details.", Exception Type =
"System.ServiceModel.Dispatcher.NetDispatcherFaultException"
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…