在使用 Flex 和 Silverlight 构建 RIA 应用程序时,您如何捕获客户端发生的错误?有哪些常见做法?我已经看到实现了一些对 Web 服务的异步 js 调用,但想知道社区是如何处理它的。
5 回答
首先,我一直使用客户端日志记录。我处理它的方式取决于整个应用程序。
如果我使用 AMF 网关,则会调用应用程序错误,发生的每个错误都会通知服务器,在服务器端,BugZilla 中打开了一个错误(这是我们使用的,你可以使用任何其他你想要的钩子)。
如果我使用基于 Web 服务的应用程序,则会有一个客户端错误的 Web 服务调用。
有人会说您不应该对每个错误都对服务器进行采样,我不同意此评论,因为客户端的错误很少见,在发布给客户端之前会进行彻底的 QA,因此我想立即了解客户端的每个错误正在经历。
在 Silverlight 中,我喜欢使用 WebClient 在某处重新登录到 Web 服务——您可以直接在 Silverlight 应用程序中执行此操作,而无需调用 JavaScript。
要捕获代码不在堆栈上时触发的异常,可以使用Application.UnhandledException事件。
我使用了与 Avi Tzurel 相同的方法——您需要在服务器端知道 Flex 客户端何时出现错误。如果您想收集更多数据(所有日志消息、警告),我将使用内部缓冲区,并异步刷新它。
无论如何,您需要考虑您的客户是否同意这种方法..也许您需要他们的同意才能将错误消息发送到服务器。
我基本上将所有错误都过滤到顶部,并在未处理的异常中捕获它们。我向用户显示一条友好的消息。然而,在我的整个应用程序中,我实现了一个 ILogger 接口。该接口可以用各种级别初始化并处理任何消息传递。您可以对其进行设置,以便用户可以添加一个 init 参数来确定是否将错误传输到服务,如果附加了调试器,我通常让记录器使用 Debug.WriteLine 写入消息以使其非常容易在调试模式下跟踪问题。
在 Silverlight 中,您可能需要考虑Silverlight Integration Pack for Enterprise Library中的日志记录和异常处理应用程序块。