在现有的ASP.NET MVC站点中添加WebRole.cs并将其调用 - 转换为Web角色

时间:2012-10-04 03:43:00

标签: azure asp.net-mvc-4 azure-web-roles

我有一个ASP.NET MVC 4站点在Azure WebRole中运行得非常好。 ASP.NET MVC项目是独立启动的,之后我将Azure Cloud Service项目添加到解决方案中,并将ASP.NET项目/站点添加为服务的“角色”之一(因此它显示在'角色'文件夹)。

我的问题是我想在ASP.NET MVC项目中使用WebRole.cs文件,但无论我尝试做什么,看来在部署时,它永远不会被调用。 OnStart和Run的重写(我知道,绝不能离开循环) - 这些显然永远不会被调用。

但是如果你启动一个新的CloudService项目并从那时开始添加一个ASP.NET MVC项目,它会自动包含一个WebRole.cs文件,所以我的猜测是我需要在某个地方配置一些东西对于WebRole.cs(实际上,WebRole类,它继承了RoleEntryPoint)来调用。可能是什么?

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 { }
            }
        }

    }
}

更新:谢谢,问题已得到解答。但我要补充一点:在这样做的同时,它显然正在工作(完全部署并在模拟器中),突然间我在完成网站的完整发布时遇到了问题。天蓝色的发布需要3个小时后:

  

验证存储帐户'xyz'...>正在上传包...> - 更新... [在这里停留了3个小时],它因此错误而失败:服务器遇到内部错误。请重试请求。所以我想知道的一件事是,我是否需要在WebRole.cs中覆盖OnStop?

更新2:以前的问题已修复,与此问题无关。实际上,我已经了解到这一点:如果您的构建中生成了任何警告,Azure通常无法使用它们,即使它们不会在本地或其他主机中引起问题。从那时起,我就更加努力地处理构建警告(但对于这个问题至关重要的是警告代码会关闭你想要忽略的许多警告类型!)。

1 个答案:

答案 0 :(得分:3)

向您的Web项目添加一个继承自RoleEntryPoint的类就足够了,它应该可以正常工作。您是否尝试在模拟器中设置断点?

您可能遇到的是 EmailFuncs.SendEmailToUs 需要来自app / web.config的信息,并且此信息不可用。您需要知道 WebRole 类在不同的进程(而不是您的Web应用程序)中运行,这意味着它不使用您的web.config。如果您希望WebRole.cs从配置文件中读取信息,则需要在WaIISHost.exe.config

中添加这些设置