Marc Cals
Marc Cals

Reputation: 2989

When a Asp.net Web App is recycled in Azure?

We have a asp.net web app with "Always on" that is running a long task. To avoid to run this task two or more time simultaneously, at the beggining of the task a flag is set to database. If this task is forced to shutdown the flag is not removed, and the task is not gonna run again without manual intervention.

I've been looking for if the concept of recycle a website is existing in Azure, I didn't find much about it. I found for example https://stackoverflow.com/a/21841469/1081568 it seems that is never executed recycled, but I find some people complaining about web apps with "always on" set that recycles randomly.

I would like to know in which circumstance an app could be Recycled/shutdown in Azure? Just for maintenance? Azure recycle asp.net webs apps? Or is a concept exclusive of On-Premise servers?

And another question, Is there a way to capture this shutdown/recycle from Azure and stop my running task gracefully if it's running.

Thanks

Upvotes: 2

Views: 2342

Answers (1)

Brando Zhang
Brando Zhang

Reputation: 28067

As far as I know, normally azure will not recycled your web app's resource, if you set web apps with "always on".

If web app's “Always On” setting is off, which means the web site will be recycled after period of inactivity (20 minutes).

And another question, Is there a way to capture this shutdown/recycle from Azure and stop my running task gracefully if it's running.

According to your description, I suggest you could send a kudu restapi request to get the current web app's processid.

If the application restarted, the processid will be changed. By comparing the processid, you could capture this web app is recycled.

More details about how to get the current web app's processid, you could refer to below steps:

1.Set a Deployment credentials in your azure web application as below:

Notice:Remember the user name and password, we will use them to generate the access token

enter image description here

2.Send the request to below url to get the process information.

Url:https://yourwebsitename.scm.azurewebsites.net/api/processes

Code sample:

   string url = @"https://yourwebsitename.scm.azurewebsites.net/api/processes";

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

            httpWebRequest.Method = "GET";
            httpWebRequest.ContentLength = 0;

            string logininforation = "username:password";

            byte[] byt = System.Text.Encoding.UTF8.GetBytes(logininforation);
            string encode = Convert.ToBase64String(byt);


            httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + encode);


            using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
            {
                using (System.IO.StreamReader r = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    string jsonResponse = r.ReadToEnd();

                    dynamic result = JsonConvert.DeserializeObject(jsonResponse);

                    dynamic resultList = result.Children();

                    foreach (var item in resultList)
                    {
                        Console.WriteLine(item.name + " : " + item.id);
                    }
                }
            }

Result:

enter image description here

You could also find the processid in the portal.

Select your web app --> Process explorer

Image: enter image description here

Upvotes: 3

Related Questions