[英]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.