2012-10-23 172 views
1

我有三個應用程序在三個獨立的應用程序池中運行。其中一個應用程序是一個很少有人有權訪問的管理應用程序。管理應用程序允許的功能之一是創建停機通知。因此,當用戶進入管理應用程序並創建停機通知時,其他兩個應用程序應該接收新的通知並將其顯示在登錄頁面上。ASP.NET緩存管理

問題是,這些通知被緩存,並且每個應用都位於單獨的應用程序池中,因此管理應用程序無法清除其他兩個應用程序中的停機通知緩存。

我想弄清楚這個方法。我唯一能想到的是在數據庫中插入一條表示緩存需要清除的記錄,其他兩個應用程序將在加載登錄頁面時檢查數據庫。有沒有人有另一種方法可能會更清潔一點?

*注意,這比停機通知更廣泛,但我只是以此爲例。

編輯

重新啓動應用程序池不是因爲它很可能會殺後臺線程可行的。

+0

是從管理應用程序爲兩個應用程序重新啓動應用程序池爲您提供的解決方案嗎? – Tariqulazam

+0

您提到清除緩存,但尚不清楚停機通知如何進入其他兩個應用程序的緩存?其他兩個應用程序如何「接到新的通知?」 –

+0

Zaid,他們調用緩存,如果它尚未填充,則從數據庫獲取數據並將其存儲在緩存中,否則返回緩存的內容。 – Chris

回答

2

如果我理解正確,你基本上是試圖從管理應用程序發送消息到其他應用程序。也許你應該考慮在這些可以從管理應用程序調用的應用程序上創建WCF服務。如果您不想使用不同的應用程序,那麼這是一種標準的溝通方式。共享媒體這樣的數據庫,它不會強制你使用輪詢模式。

+0

我開始沿着這條路線走下去,但由於每個應用程序都是獨立的域名(http // www.a.com,http // www.b.com,http // www.c.com),我是否需要處理交叉域名的網絡服務,或者我可以做到這一點,而不必去網絡? – Chris

+0

如果應用程序託管在同一個IIS上,您可能會始終將通信限制在本地主機而不將服務暴露給互聯網。您也可以使用其他綁定,例如NetNamedPipeBinding http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx。 – empi

0

如果是緩存的數據庫信息,您可以試試設置時的運氣和SqlCacheDependency。否則,我會建議不要使用ASP.NET緩存,並找到使用分佈式緩存方案的第三方解決方案,這樣所有應用程序都使用一個緩存而不是3個單獨的緩存。

1

另一種看待這種情況的方法是,這基本上是一個應用程序間消息傳遞問題,它有許多庫已經可以幫助您解決問題。想到這個,我想起了RabbitMQ。它有一個C#客戶端,可以隨時訪問。 MSMQ是另一種潛在的技術,並且已經與Windows一起提供 - 您只需要安裝它。

+0

MSMQ也可以工作,它已經是Windows的一部分(可選安裝)。你只需要安裝它。 – Kevin

+0

@Kevin那會!一個好的電話。我會將其添加到我的答案。 – tmesser

0

我不是說這是最好的答案,甚至是正確的答案,它就是我所做的。

我有一系列電子商務網站在單獨的服務器和數據中心,依靠從中央後臺網站位置提取目錄數據,然後在本地緩存它們。在我的第一次迭代中,我簡單地使用了GET請求,即中央位置可以ping相應的消費網站來啓動自己的緩存刷新例程。我在每臺電子商務服務器上都使用了SSL,因爲我已經擁有了該設置,並且可以通過SSL GET發送證書以便後臺安全地啓動刷新。

在稍後的階段,我們發現在後臺使用套接字更有效,每個消費網站都將作爲客戶端,並監聽數據的變化。後臺網站隨後可以在特定賬戶發生變化時與其相應的網站進行溝通,然後進行非常具體的溝通。這種方法更細化,我們可以根據需要更新小數據塊,而不是大塊分片更新,但這肯定比我們的第一次嘗試更復雜。