我有一个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)正确序列化?除了例外,我没有做任何时髦的事情 - 这只是一个简单的例外
感谢您的帮助。
答案 0 :(得分:1)
我非常怀疑你可以像Exception一样序列化特定于.NET的类型。我建议您创建自己的类来保存要序列化的异常部分。
答案 1 :(得分:0)
这可能是将OverflowException隐式转换为System.Exception的问题。
数据合同序列化程序非常具体。这可能是好事也可能是坏事。
我会尝试抛出一个新的System.Exception,看看这是否正常。
如果是这种情况,您可能需要将异常愚蠢,创建一个新的System.Exception,其中包含原始异常消息。
或者,就像约翰所说,如果你创建一个包含异常信息的自定义错误类,你可能会更好。