2010-08-15 102 views
1

如何在使用Flex和Silverlight构建RIA应用程序时捕获客户端发生的错误?常用的做法是什么?我已经看到一些异步的js调用实现的Web服务,但想知道社区如何处理它。你做客户端日志?

+0

AFAIK Silverlight不允许在客户端创建文件,除非通过打开的文件对话框 - 所以客户端日志记录会非常棘手,除非这是通过回调服务器的调用来登录到那里有一个DB? – 2010-08-15 16:10:23

回答

4

首先,我使用客户端记录所有的时间。 我处理它的方式取决于整个应用程序。

如果我使用AMF网关,那么有一个应用程序错误的调用,每发生一个错误,通知服务器,在服务器端BugZilla中打开一个错误(这是我们使用的,你可以使用任何你想要的其他钩子)。

如果我使用基于Web服务的应用程序,那么会出现一个Web服务调用来解决客户端错误。

有人会说你不应该对每一个错误都采样服务器,我不同意这个评论,因为在客户端的错误是罕见的,它发布到客户端之前,彻底的QA,所以我想立即知道客户遇到的每一个错误。

+0

我喜欢从客户端错误中创建JIRA问题的想法。 – 2010-08-15 22:00:48

+0

当然,这样客户不必报告错误,在最坏的情况下,如果他打电话说他有这个错误,你可以说“我们已经在上面了”。 这是很棒的客户服务 – KensoDev 2010-08-16 10:16:02

0

在Silverlight中,我喜欢使用WebClient在某处登录到Web服务 - 您可以直接在Silverlight应用程序中执行此操作,而无需调用JavaScript。

要捕获代码不在堆栈上时触发的异常,可以使用Application.UnhandledException事件。

0

我已经使用了与Avi Tzurel相同的方法 - 您需要在服务器端知道Flex客户端中出现错误的时间。如果你想收集更多的数据(所有的日志消息,警告),我会使用一个内部缓冲区,我会异步刷新它。

无论如何,你需要考虑,如果你的客户可以用这种方法..可能需要他们的协议,然后将错误消息发送到服务器。

0

我基本上渗透所有的错误到顶部,并捕获它们在未处理的异常。我向用户显示一条友好的消息。但是,在我的应用程序中,我实现了一个ILogger接口。这个接口可以用各种级别初始化并处理任何消息。您可以对其进行设置,以便用户可以添加一个init参数来确定是否将错误传输到服务,并且如果连接了调试器,我通常会使用Debug.WriteLine写入消息,以使其非常容易在调试模式下跟踪问题。