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