簡體   English   中英

在托管Web服務器中安排作業

[英]Schedule a job in hosted web server

有人可以給我一個使用.NET技術實現日常工作的最佳方法。 我有一個asp.net應用程序,其中sqlserver數據庫托管在我的實例中的共享主機GODaddy中。 我的應用程序用於添加/更改數據庫中的數據,此時數據表現相當公平。 我有一個新要求,每天根據存儲在數據庫中的一些數據標准發送一些電子郵件警報。

最初我想寫一個Windows服務,但godaddy不允許訪問除托管應用程序之外的數據庫。 有人有任何想法每天凌晨1點發送警報嗎?

提前致謝

請參閱Jeff Atwood的ASP.NET中簡易后台任務

從鏈接復制/粘貼:

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)
{
    AddTask("DoStuff", 60);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));
}

我沒有將GoDaddy用於域名注冊以外的任何其他內容,因此我對您在其托管平台上可以做或不可以做的事情沒有任何經驗。 我也不知道他們的支持或知識基礎是什么樣的,但我認為你最好的選擇是向GoDaddy詢問他們的建議。 否則,您可能會繼續實施技術上可行的東西,但被托管公司阻止。

如果它不是黃金時段的應用程序,那么快速而骯臟的事情就是讓某種外部機器人在服務器上調用(安全)網頁來觸發通知過程。 這不是一個真正的解決方案,但如果這個網站只是你的一個愛好,它可能會讓你到達,直到找到主機允許的東西。

如果這個主機不符合您的要求,也可能是找到新主機的好時機。 這些天有很多好的ASP.NET主機可用。

您可以使用Web服務器中的Windows計划程序來計划可以根據特定條件發送郵件的存儲過程調用。

osql.exe -S servername -d database -U username -P password -Q "EXEC spAlertOnCriteria"

參考文獻:

許多托管服務提供商可以每隔X分鍾為您請求一個URL。 我不知道GoDaddy是否會這樣做,但如果是這樣,你可以創建一個啟動工作的ASMX頁面,並告訴他們自動執行它。

如果他們不這樣做,一個解決方案可能是在每個頁面請求的后台線程中啟動作業。 如果你這樣做,請確保你輸入的代碼限制它每隔X分鍾或更長時間運行一次(可能使用靜態變量或數據庫表) - 閱讀這個故事

如果您可以在托管應用程序和數據庫的網站上公開服務 - 當然是經過身份驗證的服務 - 那么您可以從任何帶有憑據的框中遠程訪問該服務,下拉數據並以這種方式發送郵件。

這可以是作為Windows服務編寫的自動化過程,在調度程序下運行的應用程序,或者在凌晨1:00推送的某個按鈕。 你的選擇。

僅僅因為應用程序是唯一可以訪問數據庫的東西並不意味着您不能以其他方式公開數據。

使用System.Timers,System.Threading創建在預定時間運行的實例。 讓該線程執行您想要的任何任務...確保代碼是線程安全的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM