Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AutoStart a WCF on Azure WebRole

I have a WCF hosted on Azure (WebRole). That WCF does a lot of background tasks and replies to some petitions.

The problem is that if the WCF doesn't receive any petition for a long time (10 hours or more) the application pool is recycled on the azure instance and the WCF tasks stops. I did a little investigation an I can enable a AutoStart feature touching the machine.config, but this is not an option with a azure deploy.

Can I enable AutoStart within web.config or deploy config files?

like image 466
Jordi Avatar asked Dec 04 '12 13:12

Jordi


1 Answers

You can add some code in the WebRole.cs to modify the application pool:

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();
    }
}

Note: To use ServerManager you will need to:

  • reference C:\Windows\system32\inetsrv\Microsoft.Web.Administration.dll (or available through NuGet)
  • add <Runtime executionContext="elevated" /> in your Service Definition under the WebRole element
like image 76
Sandrino Di Mattia Avatar answered Sep 19 '22 15:09

Sandrino Di Mattia