我有一个在 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 个小时:



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

最佳答案

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

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

关于azure - 在已转换为 Web 角色的现有 ASP.NET MVC 站点中添加 WebRole.cs - 并调用它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12719967/

10-13 00:12