【问题标题】:Serializing Exceptions WCF + Silverlight序列化异常 WCF + Silverlight
【发布时间】:2010-06-05 05:04:26
【问题描述】:

我有一个 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)正确序列化?我没有做任何时髦的例外 - 这只是一个普通的'ol例外

感谢您的帮助。

【问题讨论】:

    标签: wcf silverlight serialization


    【解决方案1】:

    我非常怀疑您是否可以序列化特定于 .NET 的类型,例如异常。我建议您创建自己的类来保存您想要序列化的异常部分。

    【讨论】:

    • 如果异常冒泡到 WCF 堆栈中,WCF 将返回包装您的 System.Exception 的错误(获取消息,坚持错误)。这并不意味着您可以“神奇地”序列化任何异常。
    • @Alex:我认为 Bram 不是试图捕捉 WCF 故障,而是在 Silverlight 中捕捉异常并通过 WCF 将异常发送到日志服务。
    【解决方案2】:

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

    数据契约序列化器非常具体。这有好有坏。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多