2011-10-05 94 views
1

我們運行了許多ASP.NET MVC站點 - 每個客戶端實例有一個站點,服務器上有大約50個站點。每個站點都有自己的配置/數據庫/等。ASP.NET MVC後臺服務處理

每個網站可能運行的應用程序略有不同,取決於它們在維護計劃中的位置。

在進行後臺處理的時候,我們使用Quartz.net,它運行在網站的應用程序域中。這種方式效果很好,但顯然存在問題,例如在應用程序關閉後(如經過長時間的活動),它不會運行。

創建更強大的解決方案有哪些選擇?

正在討論Windows服務,但我不知道我們如何在IIS中獲得的不同版本上實現同一個多站點。

我真的希望每個IIS站點都有自己的後臺處理,它總是像服務一樣運行,但是與IIS站點的方式相同。

回答

0

您可以爲每個客戶端安裝一個Windows服務。儘管這似乎是一個維護頭痛。

您也可以編寫一個理解所有應用程序版本的服務,然後逐個處理每個客戶端。

您也可以創建sql server作業來完成此操作,併爲每個客戶設置一個作業。

+0

雖然每個客戶端的Windows服務聽起來都不是很可擴展。 SQL作業正在應用程序之外移動域邏輯。如果邏輯位於仍然通過rest/wcf等訪問的IIS站點內,則單個服務可能會起作用。同樣考慮AppFabric,因爲這似乎提供了一些適當的基礎架構 – IThasTheAnswer

0

我假設你有多個數據庫爲你提到的每個客戶端。 爲每個客戶端創建一個具有db連接字符串的自定義配置文件。

例如

<?xml version="1.0" encoding="utf-8" ?> 
<MyClients> 
    <MyClient name="Cleint1"> 
    <Connection key="Client1" value="data source=<database>;initial catalog=client1DB;persist security info=True;user id=xxxx;password=xxxx;MultipleActiveResultSets=True;App=EntityFramework" />  
    </MyClient> 
    <Myclient name="client2".....></MyClient> 
</MyClients> 

寫它加載上述配置文件Windows服務(客戶| connectiostring)到內存中,並通過每一個客戶數據庫配置迭代。我猜所有客戶端都有類似的作業排隊基礎架構,以便您可以針對每個數據庫執行相同的邏輯。

您可以使用Mutex爲客戶端啓動Windows服務,以確保同一客戶端的兩個服務實例不會同時運行。