4

我有一个在 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 通常不会使用它们,即使它们不会在本地或其他主机中造成问题。从那时起,我就更加认真地处理构建警告(但对此至关重要的是使用警告代码关闭您想忽略的许多警告类型!)。

4

1 回答 1

3

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

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

于 2012-10-04T10:56:22.093 回答