我會建議一個不同的方法來建議這裏的。如果您能夠,我會考慮引入消息框架,如。它滿足您開箱即用的許多要求。讓我試着根據你的要求來解決這個問題。
該服務將由客戶以單向方式調用。
NServiceBus中端點之間的所有通信都是單向的。NServiceBus使用的底層傳輸是MSMQ,與您的WCF方法非常相似,您的客戶端正在與隊列進行通信,而不是與特定的服務端點進行通信。
這些請求消息應該存儲在SQL Server數據庫中,並且Windows服務將消息排隊。
如果你想存儲在數據庫中的請求消息,那麼你可以配置NServiceBus發送到您的請求處理端點的所有郵件轉發到其他「審計」的隊列,你可以用它來堅持到數據庫中。這有助於將您的應用程序邏輯從審計實施中分離出來。
請求處理的時間是可配置的。
NServiceBus允許您推遲何時發送消息。通常情況下,消息通過總線實例的發送方法發送 - Bus.Send(msg)。您可以使用The Defer方法在未來某個時間發送消息,例如。 Bus.Defer(DateTime.Now.AddDays(1),msg);沒有什麼是你必須做的,NserviceBus將在達到指定時間後處理消息。
如果在處理消息時發生錯誤,則需要重試100次,如果仍然失敗,則需要終止。
默認情況下,只要消息離開隊列,NServiceBus就會將消息記錄在事務中。這可確保在發生故障時將消息回滾到始發隊列。在這種情況下,NServiceBus會自動嘗試重新處理消息一個可配置的次數。默認值是5.您當然可以將其設置爲任何您想要的值,但我不確定爲什麼要將其設置爲100.無論如何,NServiceBus使用此設置可以停止無限循環的自動重試。一旦達到限制,郵件將被髮送到它所在的錯誤隊列,直到您解決導致該異常的任何問題,或者直到您決定將郵件推送回隊列進行處理。無論哪種方式,您都可以放心,信息永遠不會丟失。
此外,還應該有一種機制來監控一天中進行的交易次數和失敗次數。
使用MSMQ作爲傳輸的美妙之處在於可以在基礎設施級別實現性能監視。您的應用程序的表現如何,可以通過他們坐在隊列中的時間來衡量。 NServiceBus附帶性能監視器,用於跟蹤消息在隊列中的時間長度,還可以添加內置在窗口中的perf mons以跟蹤其他活動。要監視錯誤,您只需檢查錯誤隊列中的消息數量。
NServiceBus的一個主要特點是可靠性。 WCF只會爲你做很多事情,然後你自己做。這是很多代碼,複雜性和坦率的極大錯誤傾向。我在這裏描述的東西都是NServiceBus的所有標準功能,我幾乎沒有用它可以完成的所有其他事情來刻劃表面。我建議你檢查一下。
很難理解你想要做什麼。你的客戶正在調用一個服務,但也將請求放入SQL中?這沒有多大意義。這些請求肯定會被服務使用。 – 2012-03-14 13:32:52
嘿Lijo它更好地使用SQL「Servive Broker」,它能夠很好地滿足你的需求。我使用「ServiceBroker」.http://msdn.microsoft解決了類似的情況。com/en-us/library/ms166043(v = sql.90).aspx – sandeep 2012-04-11 10:45:20