在Azure Web角色上强制启动应用程序

在Azure Web角色上强制启动应用程序,azure,iis-7.5,webrole,Azure,Iis 7.5,Webrole,我在azure上有一个web角色,我想在不等待第一个请求的情况下强制启动应用程序 我在我的站点上成功地将“自动启动”属性设置为true 但是直到第一个请求出现,应用程序才被调用 我不知道我是否错过了一些重要的东西。服务器为W2008 R2,IIS版本为7.5 谢谢 解决方案 我把解决方案代码放在这里。我希望你能帮助别人。我刚刚添加了一个WebRole.cs,并将该代码设置为每30秒执行一次ping。请注意,我正在浏览Service.svc,因为这是我的端点,您的端点可能是另一个端点。注意,我要

我在azure上有一个web角色,我想在不等待第一个请求的情况下强制启动应用程序

我在我的站点上成功地将“自动启动”属性设置为true

但是直到第一个请求出现,应用程序才被调用

我不知道我是否错过了一些重要的东西。服务器为W2008 R2,IIS版本为7.5

谢谢

解决方案

我把解决方案代码放在这里。我希望你能帮助别人。我刚刚添加了一个WebRole.cs,并将该代码设置为每30秒执行一次ping。请注意,我正在浏览Service.svc,因为这是我的端点,您的端点可能是另一个端点。注意,我要的是“Endpoint1”。如果有多个端点,则应查看该行

public class WebRole : RoleEntryPoint
{        
    public override void Run()
    {            
        var localuri = new Uri( string.Format( "http://{0}/Service.svc", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint ) );

        while (true)
        {
            try
            {                    
                var request = (HttpWebRequest)WebRequest.Create(localuri);
                request.Method = "GET";
                var response = request.GetResponse();
            }
            catch { }
            System.Threading.Thread.Sleep(30000);
        }            
    }

    public override bool OnStart()
    {               
        return base.OnStart();
    }
}

乔迪,我最近也遇到过同样的问题

基于我的测试应用程序,仅当第一个请求ISS用于WebApp时,才会调用_Start()。(如果您尝试在调试中启动VS而不打开任何页面(请参阅proj/Debug中的选项),您将看到如果您不在Azure中运行WebApp,应用程序_start()也不会被调用)

我想当WebRole启动时,您需要做一些事情,我们将代码放入WebRole.cs;) 在这里,您可以覆盖OnStart()和OnStop(),并放置在WebRole启动时将执行的代码

我用这种方式运行了一个BakgroundWorker,它独立于IIS执行一些计划任务

我希望这有帮助。 戴维德

注: 1-如果您没有WebRole.cs,请在项目根目录中创建它,并在其中写入: 公共类WebRole:RoleEntryPoint { 公共覆盖bool OnStart() { …你的代码。。。 返回base.OnStart(); } }


2-如果您需要调试代码,请记住您需要使用Azure项目运行VS-in-debug,该项目将WebApp称为“运行项目”否则WebRole将不会被调用

,IIS将仅在第一个请求到达时启动。解决方法是从
OnStart
或您的
RoleEntryPoint
子代向同一个VM发送HTTP请求-这很容易使用
WebRequest
或等效类。

您可以尝试在WebRole.cs中添加一些代码,以从您的网站请求一些URL。我已经试过了,似乎有点效果。但是调试是一件痛苦的事情,所以我从来没有把它真正确定下来


另一个选择是使用。您不能在IIS 7.5上使用它,但是如果您将角色升级到Windows 2012(在.cscfg中设置osFamily=“3”),您可以获得IIS 8。

这就是我目前正在尝试的,XDI将相同的解决方案用于客户端的4个生产环境。必须有多个节点(实例),随机请求会突然变得非常慢。显然是因为他们在这些请求上运行appstart。如果需要,可以提供代码吗?webrole实例对自己的ip执行请求,然后,每个实例负责保持活动状态。如果你把它放在App_Start上,你仍然需要第一个请求。@Jordi:我认为
GetResponseStream()
ReadToEnd()
是不必要的。@Jordi:Btw你的解决方案将在整个实例生存期内发送请求。为什么不在
OnStart()
中只发送一个请求?请注意,WebRole.cs中的代码运行在与IIS不同的进程中。因此,某些类型的初始化(在内存中预加载数据、打开连接等)无法在那里完成。感谢Brian,这正是发生在我身上的事情:(