序列化异常WCF + Silverlight

时间:2010-06-05 05:04:26

标签: wcf silverlight serialization

我有一个WCF服务,用于为我的项目提交错误。数据类的片段:

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

我有一个Silverlight应用程序,它使用WCF服务在发生任何错误时将其发送回家。这是我正在测试的错误:

 Dim i As Integer = 5
 i = i / 0

问题是SL正在敲打这条消息:

  

System.ServiceModel.CommunicationException未被用户代码处理     Message =尝试序列化参数时出错:bug。 InnerException消息是'Type'System.OverflowException',不期望数据协定名称为'OverflowException:http://schemas.datacontract.org/2004/07/System'。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。有关详细信息,请参阅InnerException。

是否有一些技巧可以使通用.NET异常(任何InnerException)正确序列化?除了例外,我没有做任何时髦的事情 - 这只是一个简单的例外

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我非常怀疑你可以像Exception一样序列化特定于.NET的类型。我建议您创建自己的类来保存要序列化的异常部分。

答案 1 :(得分:0)

这可能是将OverflowException隐式转换为System.Exception的问题。

数据合同序列化程序非常具体。这可能是好事也可能是坏事。

我会尝试抛出一个新的System.Exception,看看这是否正常。

如果是这种情况,您可能需要将异常愚蠢,创建一个新的System.Exception,其中包含原始异常消息。

或者,就像约翰所说,如果你创建一个包含异常信息的自定义错误类,你可能会更好。