2013-03-05 54 views
2

基本上我有一個網站,將運行後臺任務來執行一些「維護」職責,而不是閒置。當它閒置時,這些進程不需要運行。正確的方式讓一個網站保持另一個在IIS中活着?

現在我有一個輔助網站(主站點下的虛擬目錄),也需要執行這些任務。但是,他們不能同時運行它們,否則會導致問題。

現在,更正確的解決方案可能是合併站點,將任務分解到不同的應用程序,或更改任務,以便它們在同時運行時不會相互衝突。由於某種原因,這些不是(當前)選項。

因此,基本上當輔助網站處於活動狀態時,確保主要網站清醒並執行這些任務的最佳方法是什麼?

我在想最簡單的解決方案是在輔助網站中包含對主網站的引用,以便在輔助網站上加載任何頁面都會強制第一個網站服務器請求。像1px圖像。

但是,這會通過IIS更好地解決?他們應該共享相同的應用程序池嗎?這兩個應用程序都相對穩定,所以我並不擔心一個網站會讓另一個網站崩潰。

+0

爲每個站點編寫1個方法的Web服務,並使用另一端的Web服務來檢查您需要的任何後端。 – RandomUs1r 2013-03-05 19:19:11

+1

請注意,這不是該工作的正確工具。你應該有一個Windows服務/預定的工作來進行維護或打電話給你的網站上的網頁,並讓它來做維護。請注意,如果這項工作是長期存在的,那麼您需要掌握超時和資源限制以防止它被殺死 - 這可能會對您網站上的其他地方產生負面影響。 – Basic 2013-03-05 19:29:53

回答

0

你的問題有點困惑。在某一時刻,你說這兩個網站不能同時運行這個任務,但是那麼你說當輔助設備處於活動狀態時,主設備也應該處於活動狀態?

假設您的目標是讓任務一次只能在一個地方運行,您基本上會遇到鎖定問題。一些解決方案是:

  • 保持一個鎖(例如物理文件,數據庫條目等),並且只在其他站點沒有持有鎖的情況下運行任務。
  • 使任務在站點A中可調用,然後讓站點B調用它而不是運行任務本身。然後,站點A可以跟蹤它是否已經在運行任務。
  • 您自己列出的所有解決方案(特別是將背景任務完全分離出去)是比上述更好的解決方案。

希望有所幫助。

+0

感謝您的回答。我沒有給二級網站運行任務的能力。這就是爲什麼它必須依賴主站點才能這樣做。這就是爲什麼當輔助站點處於活動狀態時,主站點也必須如此。所以我不認爲這真的是一個鎖定問題。 – Brandon 2013-03-05 19:33:02

0

很難依賴在Web服務上運行自動化任務。如果應用程序池被回收,那麼該任務將會丟失,並且該進程可能會失去完整性。無法保證在收集應用程序池時進程會很好地降級。

運行專用任務最好由專門設置的系統處理。即,託管此Web服務的服務器。我認爲你會更適合讓主機服務直接在服務器上運行,而不是作爲網絡服務暴露給網絡。

但是,如果這不是一個選項,那麼您可能會從合併它們時受益。只要應用程序池從子服務處於活動狀態,這種方式就可以使用父服務。同樣,你可以讓他們共享一個應用程序池。這裏的問題如上所述,專用流程的完整性可能會受到影響。

。NET並不是專門爲運行專門的後臺任務而設計的。這更適合支持Web服務的桌面應用程序。