2011-07-05 6 views
1

例外の逆シリアル化に問題があります。ネットワーク上で例外を送信することは悪い習慣であることを十分に認識していますが、現在の設定では、システムを統合して動作させる必要があります。バイナリフォーマッタで逆シリアル化した後にException.TargetSiteがnullになる

サーバーシステムは.net 4 wcfサービスで、呼び出し元は.net 2で、標準のWeb参照を使用して.4を呼び出します。

サーバー側は例外をシリアル化し、Base64文字列でエンコードします。受信側

 var formatter = new BinaryFormatter(); 
     messageChannel.ServerException = (Exception) 
     formatter.Deserialize(new MemoryStream(Convert.FromBase64String(base64string))); 

 var formatter = new BinaryFormatter(); 
     var mem = new MemoryStream(); 
     formatter.Serialize(mem, ex); 
     EncodedException = Convert.ToBase64String(mem.ToArray()); 

すべてがTargetSite除いてあります。

ご意見をいただければ幸いです。

おかげ

ヨハン

答えて

2

Exception.TargetSiteは、現在の例外をスローするメソッドを取得します。 MSDN: 例外ハンドラーがアプリケーションドメインの境界を越えて例外を処理した場合、TargetSiteプロパティは例外がスローされたメソッドの名前を正確に報告しないことがあります。

戻り値は、リモートコード/アプリケーション上にExpetionのTargetSiteが存在する場合にのみ割り当てることができます(そして、異なるコード/アプリケーションである可能性があるためではありません)。

C#オブジェクトのリフレクションをネットワーク経由でシリアル化するのと同じことです。リモートオブジェクトに反射オブジェクトが存在しない場合でも、ローカルサイトで動作しているように動作します。つまり、クラスを持たないクラスのリフレクションは何もありません。

関連する問題