NetDispatcherFaultException:ValueType'System.Decimal'不能为空

时间:2016-09-12 05:12:35

标签: c# wcf

我正在尝试进行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 [])

我不知道导致错误的原因。

1 个答案:

答案 0 :(得分:0)

此异常是由消息的序列化程序与解串器没有相同的dll引起的。

在这种情况下,该类已过时,因此,发送方(序列化程序)序列化了一个对象,该对象没有接收器(解串器)所期望的十进制字段并且抛出异常。

我不确定为什么甚至允许WCF连接发生,但我想这就是WCF的工作方式。