Ответ 1
У меня возникла аналогичная проблема. У меня есть веб-сайт (общий режим) и связанный webjob (непрерывный тип). Глядя на журналы webjob, я обнаружил, что задание переходит в состояние остановки примерно через 15 мин. бездействия и перестает реагировать на запуск сообщений. Представляется противоречащим концепции непрерывной концепции работы, но, судя по всему, для ее бесперебойной работы вы должны подписаться на платный веб-сайт. Ты получаешь то, за что платишь...
Тем не менее, мой сайт должен использоваться только примерно каждые несколько дней, и работа в общем режиме имеет смысл. Я не возражаю, что сайту нужно немного больше времени, чтобы начать работу - при условии, что он перезапустится автоматически. Проблема с webjob заключается в том, что когда-то остановился, он не перезапустится сам по себе. Итак, моя цель состояла в том, чтобы перезапустить его на веб-сайте.
Я заметил, что простой просмотр веб-страницы от Azure Management Portal начинает ее. Следуя этой линии мышления, я обнаружил, что для получения свойств webjob достаточно перевести его в рабочее состояние. Единственный трюк заключается в том, как получить свойства программно, так что перезапуск веб-сайта также перезапустит webjob.
Поскольку вызов для получения свойств webjob должен быть аутентифицирован, первым шагом будет переход на портал Azure Management Portal и загрузка профиля публикации веб-сайта. В профиле публикации вы можете найти учетные данные для аутентификации: имя пользователя (обычно $< имя_сайта > ) и userPWD (хеш пароля). Скопируйте их.
Вот функция, которая получит свойства webjob и разбудит ее (если еще не запущена):
class Program
{
static void Main(string[] args)
{
string websiteName = "<website_name>";
string webjobName = "<webjob_name>";
string userName = "<from_publishing_profile>";
string userPWD = "<from_publishing_profile>";
string webjobUrl = string.Format("https://{0}.scm.azurewebsites.net/api/continuouswebjobs/{1}", websiteName, webjobName);
var result = GetWebjobState(webjobUrl, userName, userPWD);
Console.WriteLine(result);
Console.ReadKey(true);
}
private static JObject GetWebjobState(string webjobUrl, string userName, string userPWD)
{
HttpClient client = new HttpClient();
string auth = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ':' + userPWD));
client.DefaultRequestHeaders.Add("authorization", auth);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var data = client.GetStringAsync(webjobUrl).Result;
var result = JsonConvert.DeserializeObject(data) as JObject;
return result;
}
}
Вы можете использовать аналогичную функцию для получения всех веб-сайтов на своем веб-сайте (используйте конечную точку https://<website_name > .scm.azurewebsites.net/api/webjobs). Вы также можете посмотреть возвращаемый объект JObject, чтобы проверить фактическое состояние веб-темы и других свойств.