我正在尝试进行WCF调用,但是当调用返回到客户端时,我一直收到此错误。我已经尝试将所有十进制值设置为非空值,如下所示:
[FaultContract(typeof(AdaptFaultDetail))]
[FaultContract(typeof(BLFaultDetail))]
public IRecord SaveRecord(IRecord theRecord, string transactionId, bool reloadRecordAfterSave)
{
var retVal = GeneralServiceCalls.SaveRecord(theRecord, transactionId, reloadRecordAfterSave);
foreach (var property in retVal.GetType().GetProperties())
{
if (property.PropertyType == typeof(decimal) && property.GetValue(retVal) == null)
{
property.SetValue(retVal, 0);
}
}
return retVal;
}
但我仍然在客户端遇到此错误:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:SaveRecordResult时出错。 InnerException消息是'ValueType',System.Decimal'不能为null。'。有关详细信息,请参阅InnerException。
内部例外:
System.Runtime.Serialization.SerializationException:ValueType'System.Decimal'不能为null。 在ReadAssetCustomFromXml(XmlReaderDelegator,XmlObjectSerializerReadContext,XmlDictionaryString [],XmlDictionaryString [])
我不知道导致错误的原因。
答案 0 :(得分:0)
此异常是由消息的序列化程序与解串器没有相同的dll引起的。
在这种情况下,该类已过时,因此,发送方(序列化程序)序列化了一个对象,该对象没有接收器(解串器)所期望的十进制字段并且抛出异常。
我不确定为什么甚至允许WCF连接发生,但我想这就是WCF的工作方式。