2010-06-05 96 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