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



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

我设法在我的网站上将"自动开始"属性设置为true

在Azure WebRole上自动启动WCF

但是Application_Start在第一个请求到来之前不会被调用。

我不知道我是否在这里遗漏了一些重要的东西。服务器为W2008 R2, IIS版本为7.5

谢谢!

<

解决方案/strong>

我把解决方案代码放在这里。我希望能帮到别人。我只是添加了一个WebRole.cs,并把代码每30秒执行一次ping。请注意我正在浏览服务。因为这是我的端点,你的端点可以是另一个。注意,我要的是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();
    }
}

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

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

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

我认为你需要做一些事情当WebRole开始,我们把你的代码在WebRole.cs;)在这里,你可以重写OnStart()和OnStop(),并把你的代码将在WebRole启动时执行。

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

我希望这有帮助。大卫。。

注意:1 -如果你没有一个WebRole.cs创建它在项目的根,并在里面写:公共类WebRole: RoleEntryPoint{public override bool OnStart(){…你的代码……返回base.OnStart ();}}

2 -如果你需要来调试代码,你需要运行VS在调试中使用Azure项目,将WebApp 作为"运行项目"否则WebRole将不会被调用

你可以试着在你的WebRole.cs中放一些代码来从你的网站请求一些url。我试过了,似乎有点效果。但是调试起来很麻烦,所以我一直没能把它搞定。

另一个选项是使用IIS应用程序初始化。你不能在IIS 7.5上使用它,但如果你将你的角色升级到Windows 2012,你可以得到IIS 8(在你的。cscfg中设置osFamily="3")。

相关内容

  • 没有找到相关文章

最新更新