【问题标题】:Error Handling in Silverlight ApplicationsSilverlight 应用程序中的错误处理
【发布时间】:2010-09-12 11:14:59
【问题描述】:

如何处理 Sivlerlight 应用程序中出现的任何错误的最佳方法是什么?

我不是在谈论开发环境中的错误处理。

但是记录错误并查找它们以供将来参考的最佳方法是什么?

【问题讨论】:

    标签: .net silverlight silverlight-4.0 error-handling


    【解决方案1】:

    我使用的技术是同时登录到服务器和客户端。您可以通过一个入口点、具有许多静态方法的Log 类或单例(如果您愿意)来执行此操作。然后可以将其配置为仅执行客户端日志记录,仅执行服务器日志记录,或者两者都不执行。

    然后可以在非恐慌诱导对话框中显示客户端日志,其中完整的堆栈跟踪可在可切换的文本框中找到。这显然允许在 Web 服务关闭或损坏时捕获异常。如果用户特别生气,它还可以让用户复制堆栈跟踪并通过电子邮件发送给您。

    虽然服务器日志记录(例如使用 Log4Net)更强大,因为它提供了更多的日志记录选项,包括电子邮件警报,但它确实依赖于您能够找到特定人员的例外情况,这需要额外的搜索工具或事件日志中的知识。

    在我看来,添加客户端日志记录以供回退(以及服务器日志记录)是一个值得的额外功能。

    【讨论】:

    • “完整的堆栈跟踪在可切换的文本框中可用。”选择此选项时要非常小心。如果您说的是受控 Intranet 应用程序中的 SL 控制,那么您应该没问题。但是,如果这是在 Internet 上公开的 SL 控件,则显示堆栈跟踪可能会带来安全风险。您不希望向客户透露任何有关可能暴露代码内部工作的异常的详细信息。
    • @Atconway 他们可以解压缩 XAP 并查看反射器 :)
    • 是的,但是使用反射器解压缩 .zap 文件不会让您“插入 MyTableName 失败。MyServiceDALMethod.Save(String Val1, StringVal2) 处没有此类参数 @UserID”信息。另外,如果客户端确实存在某些秘密,则可以对代码进行混淆以帮助防止使用反编译器。我认为普遍的共识是“不”向客户端显示完整的堆栈跟踪,除非您正在测试等。
    • @atconway 这种错误会出现在 eventargs.Error 属性中,并且不会被处理。我可以理解您的观点,但我认为这不是一种选择,而是取决于您的目标受众的技术水平
    【解决方案2】:

    我通常不喜欢仅仅依靠 Silverlight 以有意义的方式向客户端显示错误(即“加载数据时出现问题...”)。相反,我更喜欢包装异常并通过 WCF 服务调用我的服务器,并使用公开的方法来接受 Silverlight 异常作为参数。一旦在服务器上,您可以将其记录到事件日志、文本日志、电子邮件到支持组等。

    这里真正的关键是让异常从客户端返回到您的服务器,以便以最佳和最可沟通的方式进行处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多