2011-10-20 32 views
1

我對這個問題並不是很滿意,因爲我總是寫自己的記錄器到現在。關於LAB EntLib,MSMQ和WCF

我有一個WCF REST Web服務。 此服務需要將信息從錯誤記錄到誰使用它以及何時使用。

爲此,已選擇來自企業庫(5.0)的日誌記錄應用程序塊。 爲了保持良好的性能,我們決定使用MSMQ。目的是在那裏存儲日誌,直到我們在某個時刻把它存入文件。

我在幾個網站上看到我們可以使用WCF將消息傳輸到MSMQ,然後使用另一個實體來處理隊列,或者我們可以使用MSMQ作爲傳輸協議與WCF進行通信。現在我只使用LAB的Logger類將日誌插入隊列中。

我只想使用MSMQ從日誌記錄功能中取消同步web服務。

所以,這裏是我的問題: 什麼情況下,MSMQ對WCF有用? 在我描述的情況下,使用另一個WCF應用程序只是爲了記錄文件中的某些內容而不是矯枉過正?

回答

2

我認爲你在這裏混淆了兩件事。 WCF中的MSMQ傳輸就是這樣一種傳輸機制,可以用來代替HTTP或TCP。你的問題是(我假設)你想從異步登錄的WCF服務,這是一個好主意。 EntLib包含MSMQ分發服務,該服務將從您的應用程序中將記錄事件寫入隊列,前提是正確配置了將MSMQ指定爲目標的日誌記錄塊配置。經銷商然後將其實際寫入數據庫。例如,異步日誌記錄是一個非常聰明的事情,因爲它可以確保您的事件處於數據庫已經消失的災難性情況下的持久性介質中。更不用說數據庫不作爲正常應用程序操作的一部分進行訪問,這消除了潛在的故障點。

我曾經使用過一種自定義數據庫日誌機制的Web應用程序。有一些地方會在事務中發生數據庫操作,並且在失敗時(比如說來自ADO的關係約束錯誤)會在日誌中寫入一條消息......只是讓它與主事務一起回滾。作爲異常處理策略的一部分,如果您直接將數據寫入數據庫,那麼這就是您可能陷入的問題。

無論如何,我不確定這是否回答你的問題。 Here's很好的概述瞭如何在EntLib中實現這一切。

+0

非常感謝你,儘管我的問題很混亂,但你完全明白了我的觀點。 – lollancf37