2016-09-12 23 views
1

WCFコールを作成しようとしていますが、コールがクライアントに返されたときにこのエラーが発生し続けます。私はそうのような非NULL値にすべての小数の値を設定しようとしました:NetDispatcherFaultException:ValueType 'System.Decimal'をNullにすることはできません。

[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

内部例外の内容を表示してください。そして、SaveRecordResultの定義を投稿してください。 – khlr

+0

どこでその定義を見つけることができますか?私はそれがちょうど生成されたWCFのものだと思った。 –

+0

SvcUtil.exeはプロキシクラスを生成します。カーソルをSaveRecordResultのどこかに置き、F12を押します。あなたはサービスをコントロールしていますか? – khlr

答えて

0

この例外は、デシリアライザと同じdllを持たないメッセージのシリアライザによって発生しています。

この場合、クラスは古く、その結果、送信者(シリアライザ)は、受信者(デシリアライザ)が予期していた小数フィールドを持たず、例外がスローされたオブジェクトをシリアル化しました。

なぜWCF接続が発生するのかがわかりませんが、WCFがどのように動作するのかは分かりません。