2011-07-05 113 views
1

我們在反序列化異常時遇到了問題。我完全意識到,通過網絡發送異常是一種不好的做法,但目前的設置要求我們的系統集成工作。使用二進制格式化程序進行反序列化後Exception.TargetSite爲空

服務器系統是一個.NET 4 WCF服務和呼叫方是一個.NET 2調用使用標準的網絡參考0.4。

服務器端只需序列化異常,並在一個Base64編碼字符串它。

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

在接收端

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

所有有除了TargetSite。

任何提示是不勝感激。

感謝

約翰

回答

2

Exception.TargetSite獲取拋出當前異常的方法。根據MSDN: 如果異常處理程序跨應用程序域邊界處理異常,則TargetSite屬性可能無法準確報告引發異常的方法的名稱。

這是有道理的,因爲返回值只有當你的遠程代碼/應用程序存在expetion的TargetSite被分配(它可能不會,因爲它可以是一個不同的代碼/應用程序)。

這與序列化C#對象的反射並將其通過網絡發送給de序列化並期望它在本地站點上工作時一樣,即使遠程站點上不存在反射對象。簡而言之:沒有班級的反思是沒有任何意義的。

相關問題