2010-08-15 101 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寫入消息,以使其非常容易在調試模式下跟蹤問題。