我有一个在 Azure WebRole 中运行良好的 ASP.NET MVC 4 站点。ASP.NET MVC 项目是自行启动的,之后我向解决方案添加了一个 Azure 云服务项目,并将 ASP.NET 项目/站点添加为服务的“角色”之一(因此它显示在“角色”文件夹)。
我的问题是我想在 ASP.NET MVC 项目中使用 WebRole.cs 文件,但无论我尝试做什么,似乎在部署时,它永远不会被调用。OnStart 和 Run 的覆盖(我知道,绝不能离开循环)——这些显然永远不会被调用。
但是如果你启动一个新的 CloudService 项目并从一开始就添加一个 ASP.NET MVC 项目,它会自动在其中包含一个 WebRole.cs 文件,所以我的猜测是我需要在某个地方为 WebRole 配置一些东西.cs(实际上是继承 RoleEntryPoint 的 WebRole 类)被调用。那可能是什么?
using System;
using System.Web;
//using Microsoft.WindowsAzure.StorageClient;
using System.Diagnostics;
using System.Threading;
namespace Us.WebUI
{
public class WebRole : Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint
{
public override bool OnStart()
{
return true; //return base.OnStart(); // CALL THIS???
}
public override void Run()
{
while (true) {
Thread.Sleep(TimeSpan.FromSeconds(30));
try {
EmailFuncs.SendEmailToUs("An email from our WebRole?????", "Email me this, email me that.");
}
catch { }
}
}
}
}
更新:谢谢,问题已得到解答。但我要补充一点:在这样做时,虽然它显然可以正常工作(完全部署并在模拟器中),但突然间我在完全发布网站时遇到了问题。在 azure 发布耗时 3 小时后:
正在验证存储帐户“xyz”... > 正在上传包... > - 正在更新... [在这里停留了 3 小时],它失败并出现以下错误:服务器遇到内部错误。请重试请求。所以我想知道的一件事是,我是否需要覆盖 WebRole.cs 中的 OnStop?
更新 2:之前的问题已修复,与此问题无关。实际上,我已经了解到:如果您在构建中生成了任何警告,Azure 通常不会使用它们,即使它们不会在本地或其他主机中造成问题。从那时起,我就更加认真地处理构建警告(但对此至关重要的是使用警告代码关闭您想忽略的许多警告类型!)。