2013-12-07 118 views
0

Global.asax中的代碼可以很好地與IIS配合使用,但是當我將應用程序部署到Azure時,它不起作用。Global.asax計時器適用於IIS,但不適用於Azure

protected void Application_Start(object sender, EventArgs e) 
    { 
     System.Timers.Timer timer = new System.Timers.Timer(); 
     timer.Interval = 60000;  
     timer.AutoReset = true; 
     timer.Elapsed += new ElapsedEventHandler(NewCandidates); 
     timer.Enabled = true; 
    } 

    public void NewCandidates(object source, System.Timers.ElapsedEventArgs e) 
    { 
     SendEmail.MailSender mail = new MailSender(); 
     mail.EmailSender(); 
    } 

都是因爲Azure不支持電子郵件觸發器。我創建了上面的Web應用程序來發送smtp電子郵件並將其作爲雲服務發佈到Azure。每個星期五都會有一封電子郵件發送給本週候選人表中的記錄。任何安排電子郵件都會有幫助,但我認爲我不能去發送SendGrid。

+0

你可以在'NewCandidates()'方法中進行一些日誌記錄以查看它是否在Azure中託管時被調用?這很可能與郵件服務器端的權限有關 - 從其他域中繼可能被禁用或某些防火牆設置。 –

+0

什麼是最簡單的方法來進行一些日誌記錄? – Jude

+0

您的應用程序是在虛擬機(IaaS)還是雲服務(PaaS)中運行?理想的解決方案是使用Windows Azure診斷程序。一個快速和骯髒的解決方案是將消息放入隊列或blob中。 –

回答

0

您應該考慮移出您的代碼以利用Azure調度程序(http://www.windowsazure.com/en-us/services/scheduler/)。與使用上述方法相比,這將是更可靠的調度服務。

可靠的郵件傳遞實際上只能通過SendGrid的使用 - 其他任何事情都可能會被一個黑名單或另一個黑名單反彈。您可以免費使用SendGrid每月發送25,000封電子郵件(http://sendgrid.com/windowsazure.html)。

如果你不能使用SendGrid,那麼你可以使用Azure之外的SMTP中繼(比如在你自己的網絡上),你可以彈出郵件通過,雖然這可能無法工作,除非你修改消息來刪除原點IP /主機名。

+0

我去了SendGrid。我首先想到的並不複雜。這裏很清楚:https://github.com/sendgrid/sendgrid-csharp – Jude

相關問題