在Azure中回收Asp.net Web App时?

时间:2017-06-01 12:31:04

标签: asp.net azure azure-web-app-service

我们有一个asp.net网络应用程序,其中“Always on”正在运行一项长期任务。为避免同时运行此任务两次或多次,在任务开始时,将标志设置为数据库。如果强制关闭此任务,则不会删除该标志,并且如果没有人工干预,该任务将无法再次运行。

我一直在寻找Azure中是否存在回收网站的概念,我没有找到太多相关信息。我发现例如https://stackoverflow.com/a/21841469/1081568它似乎从未被执行回收,但我发现有些人抱怨网络应用程序的“永远在线”设置随机回收。

我想知道应用程序可以在Azure中循环/关闭的情况?只是为了维护? Azure回收asp.net网络应用程序?或者是一个独立于内部部署服务器的概念?

另一个问题是,有没有办法从Azure捕获此关闭/回收,并在运行时正常停止我的运行任务。

由于

1 个答案:

答案 0 :(得分:2)

据我所知,如果您使用“永远在线”设置网络应用,通常azure不会回收您的网络应用资源。

如果网络应用程序的“始终开启”设置已关闭,则表示网站将在一段时间不活动(20分钟)后回收。

  

另一个问题是,有没有办法从Azure捕获此关闭/回收,并在运行时正常停止我的运行任务。

根据您的描述,我建议您发送一份kudu restapi请求以获取当前的网络应用程序的processid。

如果应用程序重新启动,则会更改processid。通过比较processid,您可以捕获此Web应用程序被回收。

有关如何获取当前Web应用程序的processid的更多详细信息,请参阅以下步骤:

1.在您的azure Web应用程序中设置部署凭据,如下所示:

注意:记住用户名和密码,我们将使用它们来生成访问令牌

enter image description here

2.将请求发送到以下网址以获取流程信息。

网址:https://yourwebsitename.scm.azurewebsites.net/api/processes

代码示例:

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

结果:

enter image description here

您还可以在门户网站中找到processid。

选择您的网络应用 - >进程资源管理器

图片:enter image description here