2010-06-05 203 views
0

我有一個WCF服務用於爲我的項目提交錯誤。數據類的代碼片段:序列化異常WCF + Silverlight

Private _exception As Exception 
<DataMember()> _ 
Public Property Exception As Exception 
    Get 
     Return _exception 
    End Get 
    Set(ByVal value As Exception) 
     _exception = value 
    End Set 
End Property 

我有一個使用WCF服務送回家任何錯誤,如果當他們出現的Silverlight應用程序。這是我與測試錯誤:

Dim i As Integer = 5 
i = i/0 

被SL被敲打與此消息的問題:

System.ServiceModel.CommunicationException是由用戶代碼 消息未處理=有一個嘗試序列化參數時出錯:錯誤。 InnerException消息是'Type'System.OverflowException'與數據契約名稱'OverflowException:http://schemas.datacontract.org/2004/07/System'不是預期的。將任何未知的靜態類型添加到已知類型列表中 - 例如,使用KnownTypeAttribute屬性或將它們添加到傳遞給DataContractSerializer的已知類型列表中。有關更多詳細信息,請參閱InnerException。

是否有一些技巧來獲得一個通用的.NET異常(任何InnerException)序列化正確?除了例外情況,我沒有做任何事情 - 這只是一個簡單的例外

感謝您的任何幫助。

回答

0

這可能會將OverflowException隱式轉換爲System.Exception時出現問題。

數據協定序列化程序非常具體。這可能是好的也可能是壞的。

我會嘗試只是拋出一個新的System.Exception,看看這是否正常工作。

如果是這種情況,您可能需要啞掉異常,創建一個新的System.Exception,並在其中包含原始異常消息。或者像約翰說的那樣,如果你創建一個自定義錯誤類來保存異常信息,你可能會有更好的辦法。

1

我很懷疑你可以序列化一個特定於.NET的類型,例如Exception。我建議你創建你自己的類來保存你想要序列化的異常部分。

+0

感謝您的回覆。 MSDN說WCF可以序列化一個通用的System.Exception ... – Bram 2010-06-05 05:15:07

+0

@Bram:鏈接,請。 – 2010-06-05 07:04:55

+0

如果WCF堆棧中冒出一個異常,WCF將返回一個包裝System.Exception的錯誤(帶消息,陷入錯誤)。這並不意味着你可以「奇蹟般」地序列化任何異常。 – Alex 2010-06-05 15:19:06