6

我在 azure 上有一个网络角色,我想强制 Application_Start 而不等待第一个请求。

我设法在我的网站上将“自动启动”属性设置为 true

在 Azure WebRole 上自动启动 WCF

但是 Application_Start 直到第一个请求到来时才被调用。

我不知道我是否在这里遗漏了一些重要的东西。服务器是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();
    }
}
4

3 回答 3

3

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

于 2013-01-10T08:12:18.817 回答
1

Jordi,我最近遇到了同样的问题。

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

我想你需要在 WebRole 启动时做一些事情,把你的代码放在WebRole.cs中;)在这里你可以覆盖OnStart()和 OnStop() 并把你的代码放在 WebRole 启动时将被执行的代码。

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

我希望这会有所帮助。戴维德。

注意:1 - 如果你没有 WebRole.cs 在项目的根目录中创建它并在里面写: public class WebRole : RoleEntryPoint { public override bool OnStart() { ...你的代码... return base.OnStart( ); } }

2 - 如果您需要调试代码,请注意您需要在调试中使用将WebApp称为“运行项目”的Azure 项目运行 VS ,否则不会调用 WebRole

于 2013-01-09T16:46:45.000 回答
1

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

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

于 2013-01-10T15:43:36.117 回答