2010-03-29 75 views
0

我目前正在學習wcf以瞭解即將開展的項目。 我創建的服務是使用MSMQ更新數據庫,但數據庫無法在特定時間接受消息。如何使服務在特定時間不接收郵件

該服務將是一個Windows服務。我現在遇到的一件事情是如何讓服務在這些時候停止從隊列中讀取消息,例如可以說我不想在週日閱讀隊列中的消息。我將如何去實現這一點。因此,客戶端可以將消息發送到更新數據庫的隊列,但該服務直到星期一纔讀取消息,以便數據庫在週一獲取所有更新?

我已經開始尋找創建一個自定義主機,但我不知道我是否正朝着正確的方向前進。

在此先感謝。

+0

我目前正試圖繞過使用服務主機並實現我自己的通道偵聽器。我希望在星期天停止收聽。 – Miker169 2010-03-30 12:45:34

回答

0

爲了最終獲得解決方案,我將自己的IInputChannel(它重寫了WaitForMessage和BeginWaitForMessage方法,以便它們在週日返回False),這樣通道就不會收到任何消息,我也創建了一個新的通道監聽器來實現自定義通道,然後爲通道監聽器創建一個新的綁定單元。

我不得不改變一些東西,比如消息的生存時間以及通道偵聽器的默認超時。

服務的基礎知識已經啓動,我現在有一個工作理念可以繼續。

0

這是WCF可以幫助您的任何事情 - 這是您應用的邏輯。

如果您不想在週日接受任何消息,請在星期日關閉Windows服務。您可以使用計劃任務來執行此操作,例如星期六23:59:59將其關閉,星期一早上將其重新開啓。

或者在您的代碼中處理它 - 如果是星期日,則不處理任何消息。

這真的和WCF沒什麼關係,我會說。 WCF中沒有任何東西允許您在給定時間段內「禁用」或隱藏WCF服務。

+0

對不起,我不清楚,但我正在努力解決的問題是如何停止代碼中的服務處理消息,而不使用計劃任務。我相信這應該很容易做到,但我是整個WCF堆棧的新手。 – Miker169 2010-03-29 11:18:37

+0

@ Miker169:那你到底想幹什麼?只需停止WCF服務,並在一段時間內不接受任何消息?或者你是否想將消息接收到MSMQ中,但是不會從隊列中處理它們? – 2010-03-29 14:46:43

+0

我想接收郵件進入MSMQ,但不能從隊列中處理,直到星期一。 – Miker169 2010-03-29 14:54:24

1

你可以寫這樣的東西。

If Date.Now.DayOfWeek = DayOfWeek.Sunday Then 
<Store it in a List(Of <MyClass>) > 
ElseIf Not <List(Of <MyClass>)> is Nothing Then 
<Call update Db function passing <List(Of <MyClass>)> and clear <List(Of <MyClass>)>) 
End If 

所以,如果今天是星期天,你只保存消息,如果它不是,你會與存儲的信息更新數據庫,並清除存儲。

+0

好的,但我想保持隊列中的消息理想。有沒有辦法動態地改變服務在運行時正在監聽的端點,以便隊列中的消息直到星期一才停留在那裏? – Miker169 2010-03-29 13:20:46

+0

不,如Marc所說,WCF中沒有任何東西可以隱藏或禁用WCF服務。你應該在你的代碼中自己做。 – hgulyan 2010-03-29 13:35:10

0

我要去基本上轉貼@ hgulyan的答案與邏輯,我相信你想要的:

If Date.Now.DayOfWeek = DayOfWeek.Sunday Then 
' Do nothing, it is Sunday and I don't want to process anything. 
Else 
' Call function that processes messages in MSMQ 
End If 

這樣,你的服務總是可以運行,但如果是週日...它什麼都不做。

相關問題