繁体   English   中英

在Azure中回收Asp.net Web应用程序时?

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

我们有一个运行“ Always on”的asp.net Web应用程序,该应用程序运行很长时间。 为了避免同时运行两个或两个以上时间,在任务开始时,会将标志设置为数据库。 如果强制关闭此任务,则不会删除该标志,并且在没有人工干预的情况下该任务也不会再次运行。

我一直在寻找Azure中是否存在回收网站的概念,但我没有找到太多。 例如,我发现https://stackoverflow.com/a/21841469/1081568似乎从未循环执行,但是我发现有些人抱怨设置为“ always on”的Web应用程序会随机回收。

我想知道在哪种情况下可以在Azure中回收/关闭应用程序? 只是为了维护? Azure回收asp.net网站应用程序? 还是一个概念不包含本地服务器?

另一个问题是,是否有一种方法可以从Azure捕获此关闭/回收,并在运行时优雅地停止正在运行的任务。

谢谢

据我所知,如果将Web应用程序设置为“始终在线”,那么azure通常不会回收Web应用程序的资源。

如果Web应用程序的“ Always On”(始终打开)设置处于关闭状态,则表示该网站在闲置一段时间(20分钟)后将被回收。

另一个问题是,是否有一种方法可以从Azure捕获此关闭/回收,并在运行时优雅地停止正在运行的任务。

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

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

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

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

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

在此处输入图片说明

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

结果:

在此处输入图片说明

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

选择您的Web应用程序-> Process Explorer

图片: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM