2011-12-29 38 views
0

我有IIS7.5。我們目前對我們網站上的實體擁有加權評級。計算加權等級的速度非常慢,因此加載主頁現在需要超過10秒才能加載。IIS7是否可以讓它每5分鐘運行一次網頁?

爲了解決這個問題,我想將權重存儲在每個實體的數據庫中,並讓IIS每5-10分鐘運行一次腳本以重新計算權重。

我該如何去做這件事?如果它運行網頁網址,對我來說最簡單。

+0

該怎麼做?後臺工作? – Aristos 2011-12-29 18:28:53

+0

@Aristos yes如何讓服務器每隔10分鐘運行一次 – 2011-12-29 18:31:58

回答

2

不想要使用的客戶端,僅服務器不斷調用此功能,您可以在服務器上創建一個線程調用的函數計算它。

啓動線程或計時器的更好方法是在Global中。ASAX,像這樣的例子:

public class Global : System.Web.HttpApplication 
{ 
    private Timer _timer; 

    void Application_Start(object sender, EventArgs e) 
    { 
     int period = 1000 * 60 * 10; // 10 minutes 
     _timer = new Timer(TimerCallback, null, 1000, period); 
    } 

    private void TimerCallback(object state) 
    { 
     // Do your stuff here 
    } 
} 

}

+0

謝謝,這看起來最簡單。我對Global.asax不太熟悉,我會假設這會使用客戶端請求來處理,但是哪個會偶爾會導致一個客戶端長時間加載頁面? – 2011-12-29 18:36:17

+0

我有這個問題,Timer()不允許帶4個參數的構造函數。我在ASP.net 4.0上。然而,我發現這個(http://www.mikesdotnetting.com/Article/129/Simple-task-Scheduling-using-Global.asax),它可以使用非常類似的東西,我可以使用 – 2011-12-29 18:41:17

+0

使用System.Threading.Timer 。有一個System.Timers.Timer,但有其他用法。 – LawfulHacker 2011-12-29 18:59:28

3

您可以使用Cache條目進行此設置,將來設置爲過期10分鐘。

當您添加該項目時,請使用CacheItemRemovedCallback參數的回調函數 - 在此回調函數中執行您的數據庫並重新添加到期的緩存條目。

其他選項包括:

Windows服務和時間表任務仍然需要您有某種方法將結果傳遞給IIS。

+0

謝謝,不要太熱衷於緩存,儘管這個過程會變得越來越慢,我不想讓訪問者偶爾有長時間的頁面加載。 – 2011-12-29 18:35:05

+0

@TomGullen - 不知道爲什麼會有任何方位?緩存條目僅作爲使用Web命名空間的「計時器」 - 僅用於觸發將計算內容的回調。它可以包含垃圾(比如'null'),不能在任何地方使用。由於它使用回調,因此它將使用單獨的線程,並且不會對任何用戶造成任何影響。 – Oded 2011-12-29 18:37:00

+0

哦,好吧!謝謝你,還是新的緩存 – 2011-12-29 18:40:28

3

一種方法是使用Windows服務,而不是調用Web URL。

然後,它可以在背景中完全帶外運行以執行計算。這個細節在這裏:

http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx

一些優勢包括:

  • 你的IIS進程將不會受到影響,所以你的用戶會看到沒有放緩
  • 的服務能夠被停止獨立於網站啓動

但是,您需要有合理的完全訪問權限才能安裝並運行服務器e服務。

+0

謝謝,現在就看看這個。 – 2011-12-29 18:31:35

+1

當然,還有一些在IIS進程和Web服務之間進行通信的方式。 – Oded 2011-12-29 18:33:15

+0

可能:它可能就像執行計算並將它們寫入某個表格一樣簡單。 – 2011-12-29 18:47:11

-1

一個簡單的WGET或類似的批處理文件,以及來自計劃任務的幫助將做到這一點。

http://www.gnu.org/software/wget/

你可以試試這個來測試這個想法:

wget http://localhost/filename.ashx 
0

我做了這樣的事情早些時候我已經使用Windows的計劃任務,把我的腳本在特定的時間間隔。