在Azure WebRole上自动启动WCF

Jor*_*rdi 8 c# wcf azure iis-7.5

我在Azure(WebRole)上托管了一个WCF.WCF做了很多后台任务并回复了一些请愿.

问题是如果WCF长时间没有收到任何请求(10小时或更长时间),应用程序池将在azure实例上回收,并且WCF任务将停止.我做了一些调查,我可以启用一个AutoStart功能来触摸machine.config,但这不是一个azure deploy的选项.

我可以在web.config中启用AutoStart还是部署配置文件?

San*_*tia 11

您可以在WebRole.cs中添加一些代码来修改应用程序池:

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
        using (var serverManager = new ServerManager())
        {
            var mainSite = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
            var mainApplication = mainSite.Applications["/"];
            var mainApplicationPool = serverManager.ApplicationPools[mainApplication.ApplicationPoolName];
            mainApplicationPool["autoStart"] = true;
            mainApplicationPool["startMode"] = "AlwaysRunning";

            serverManager.CommitChanges();
        }

        base.Run();
    }

    public override bool OnStart()
    {
        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

        return base.OnStart();
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:要使用,ServerManager您需要:

  • 参考C:\ Windows\system32\inetsrv\Microsoft.Web.Administration.dll(或通过NuGet提供)
  • <Runtime executionContext="elevated" />在WebRole元素下添加您的服务定义

  • 只需将WebRole.cs文件添加到您的Web角色即可.还要确保在WebRole元素下的Service Definition中添加以下元素`<Runtime executionContext ="elevated"/>`.Application_Start是在IIS中运行的Web应用程序的一部分,您不应该从那里对IIS进行更改. (3认同)