Azure 在转换为web角色的现有ASP.NET MVC站点中添加WebRole.cs并调用它

Azure 在转换为web角色的现有ASP.NET MVC站点中添加WebRole.cs并调用它,azure,asp.net-mvc-4,azure-web-roles,Azure,Asp.net Mvc 4,Azure Web Roles,我有一个ASP.NETMVC4站点在Azure WebRole中运行得非常好。ASP.NET MVC项目是自己启动的,之后我将Azure云服务项目添加到解决方案中,并将ASP.NET项目/站点添加为服务的“角色”之一(因此它显示在“角色”文件夹中) 我的问题是,我希望在ASP.NET MVC项目中使用WebRole.cs文件,但无论我尝试做什么,它似乎在部署时从未被调用。OnStart和Run的重写(我知道,它永远不能离开循环)——这些显然永远不会被调用 但是,如果您启动一个新的CloudSer

我有一个ASP.NETMVC4站点在Azure WebRole中运行得非常好。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 { }
            }
        }

    }
}
更新:谢谢,问题已经回答了。但我要补充一点:在这样做的时候,当它显然在工作(完全部署并在emulator中)时,突然之间,我在完整发布站点时遇到了问题。azure发布花费3小时后:

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


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

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


您可能遇到的情况是,EmailFuncs.SendEmailToUs需要来自app/web.config的信息,而此信息不可用。您需要知道您的WebRole类运行在不同的进程(而不是web应用程序)中,这意味着它没有使用您的web.config。如果你想让WebRole.cs从配置文件中读取信息,你需要在

中添加这些设置。谢谢你,Sandrino,我很高兴听到这样的消息,至少理想情况下,添加类应该可以自己工作(团队这么做太棒了)。但是,我在那里拥有的电子邮件功能对web.config等没有依赖性。那么,有没有人有其他创造性的想法,我可以如何测试运行或OnStart是否被调用?我更新了上面的WebRole.cs代码以包含完整的代码,只是为了确保我没有遗漏什么。“您是否尝试在仿真器中设置断点?”-我从未使用过仿真器,事实上我不确定这一切是如何工作的。我一直避免做像登台这样的事情,因为这似乎需要大量的工作,远远不能反映真实的存储等等。无论如何,我会尝试一下,但是设置断点和调试通常不会使用仿真器。虽然计算仿真器确实不能完美地表示在Azure上运行应用时发生的情况,但它可能是跟踪此类问题的一种好方法。使用ComputeEmulator非常简单,只需将云项目设置为您的启动项目,然后点击开始调试。只要安装程序做得很好,它就应该可以正常工作。你仍然应该指向云存储和常规数据库,这将使事情变得更慢(不要让我在存储模拟器上开始),但比每次部署到Azure都要快得多。我不确定我以前缺少了什么,但它确实在工作!谢谢各位。奈特弗尔:谢谢你的建议!我不知道让模拟器工作起来有那么容易。在这样做的时候,我真的很惊讶地看到断点实际工作。