2011-06-29 71 views
1

我正在使用WCF作爲服務層的3層贏基於窗體的應用程序。我們有大約8到10個WCF服務(託管在Windows服務中)用於不同目的。我們有一個要求,管理員應該能夠鎖定用戶進行任何操作,然後應該能夠釋放鎖定。基本上,其目的是對服務或數據庫進行任何維護和更新。一種選擇是關閉服務。但是我們也有這樣的場景,服務不能停止,但我們仍然不能允許任何請求處理。停止向wcf服務發送用戶請求

我想知道,在WCF有一種方法或API,我們可以阻止服務採取任何請求,但仍然繼續運行。

我正在看wcf通道級別的某些東西,以阻止請求轉到服務,這可以像管理UI中的API一樣控制,而不是更改每個服務或方法。希望它能讓它更清晰一些。

感謝, 瑪尼

回答

0

阻止 「任何請求」 是不完全運行。如果您的意思是某種只讀模式,即您的應用服務查詢但不更改,則必須自行編碼。你可能可能能夠通過WCF擴展來做一些奇特的事情,但我不確定我是否會自己打擾 - 我只是在所有「正在執行」方法的開始時檢查「是管理標誌集」。或者如果這是你的意圖,可能所有的方法。

您將返回一個已知的錯誤/異常,調用者可能(或可能不會)正常處理。如果方法的數量不重要,那麼確定 - 查看WCF擴展點。我在想「操作行爲」,雖然有many extension points

+0

我不是指只讀模式。我希望這些服務能夠運行,但在管理員鎖定服務之後,當任何其他客戶端嘗試訪問該服務時,它應該拋出一個錯誤或者可能表明該服務處於鎖定狀態。希望它是明確的。 –

+0

@Mani - 那麼推測是擴展點;特別是調用者。但沒有 - 沒有內置任何內容。 –

1

您可以讓您的服務公開可以發送暫停/恢復消息的管理端點。

或者,您可以設置一個集中式服務,例如AuthorizationService,讓Windows服務爲每個調用調用AuthorizationService以確保它是允許的。然後,該服務可以根據用戶憑證,一天中的時間,管理員的心情或任何想要的來決定是否授予呼叫。我不確定第二種情況適用於您的具體情況。

+0

在兩個選項中,據我所知,我應該更改每個服務中的每個運算方法,以檢查狀態,然後相應地繼續或不進行。我擔心,目前我無法做到這一點,因爲我們有大約10個以上的服務和100多種方法。你的第一個選擇似乎讓我思考,但我不知道如何通過這個終點控制服務的其他端點。 –

+0

您可以在兩種方法中使用消息攔截來允許或禁止操作。你可以在http://msdn.microsoft.com/en-us/library/ms751495.aspx找到更多關於它的信息。 –