android — случайные ошибки 404 для Azure Web App с PHP API

У меня есть служба приложений с MySQL, размещенная в Azure, у нее есть общедоступный API и веб-приложение. Когда я использую веб-приложение, никаких проблем не возникает. Но при доступе к API из приложения Android с помощью OKHttp я получаю следующую ошибку:

StatusCode: 404, ReasonPhrase: ‘Site Not Found’, Version: 1.1, Content: ModernHttpClient.ProgressStreamContent, Headers:
{
Date: Thu, 11 May 2017 21:24:58 GMT
OkHttp-Received-Millis: 1494537900018
OkHttp-Sent-Millis: 1494537899773
Server: Microsoft-IIS/8.0
Content-Length: 5147
Content-Type: text/html
OkHttp-Received-Millis: 1494537900018
OkHttp-Sent-Millis: 1494537899773
}

Я проверил журналы, но не смог найти ответ 404. Проблема возникает, когда несколько запросов выполняются быстро. Например: переключение между вкладками, где каждая вкладка использует API для загрузки данных. И это происходит случайно в других областях.

ОБНОВИТЬ: Это текст ответа, который я получаю.

Ошибка 404 — веб-приложение не найдено.

Веб-приложение, к которому вы пытались подключиться, недоступно в этом регионе службы приложений Microsoft Azure. Это может быть связано с одной из нескольких причин:

1. Владелец веб-приложения зарегистрировал собственный домен для указания на службу приложений Microsoft Azure, но еще не настроил Azure для его распознавания. Нажмите здесь, что прочитать подробнее.

Когда владелец приложения хочет использовать настраиваемый домен с веб-приложением Microsoft Azure Web Apps, необходимо настроить Azure для распознавания настраиваемого имени домена, чтобы он мог направить запрос на соответствующий сервер в регионе. После регистрации домена у провайдера домена и настройки записи DNS CNAME для указания на адрес приложения Azurewebsites.net (например, contoso.azurewebsites.net) владельцу веб-приложения также необходимо перейти на портал Azure и настроить приложение. для нового домена. Нажмите здесь, чтобы узнать больше о настройке пользовательских доменов для веб-приложения.

2. Владелец веб-приложения переместил веб-приложение в другой регион, но кэш DNS по-прежнему направляется на старый IP-адрес, который использовался в предыдущем регионе. Нажмите здесь, что прочитать подробнее.

В веб-приложениях приложение хранится в центре обработки данных, расположенном в регионе, который владелец веб-приложения выбрал при создании приложения, а DNS-сервер Azure преобразует адрес веб-приложения, выбранный для него, в этот центр данных. DNS-серверы отвечают за разрешение имени сервера, который пользователь пытается получить в IP-адресе, но клиенты кэшируют эту информацию, чтобы иметь возможность загружать страницу максимально быстро. Если это приложение было удалено и повторно создано в другом регионе, у нового приложения будет другой IP-адрес, но клиент все еще может кэшировать старый IP-адрес. Сначала попробуйте очистить кеш на вашем клиенте, как описано здесь. Если это не помогает, возможно, это связано с кэшированием на промежуточном DNS-сервере, таком как сервер Интернета. Если это так, то эта проблема вскоре должна быть устранена, как только кэш DNS достигнет своего срока службы. Пожалуйста, попробуйте посетить приложение снова примерно через час. Если вы продолжаете получать эту страницу с ошибкой, обратитесь в службу поддержки Microsoft.

ОБНОВИТЬ : Код для доступа к API.

using (var client = new HttpClient(new NativeMessageHandler()))
{
client.BaseAddress = new Uri(BaseUrl);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”));
client.DefaultRequestHeaders.Add(“ZEMOSE-API-KEY”, ZemoseAPIKey);
var response = await client.PostAsync(url, content);
var temp = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var result = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<RootNode>(json));
return result;
}
else
{
Debug.WriteLine(client.ToString());
Debug.WriteLine(response);
Debug.WriteLine(client.DefaultRequestHeaders);
Debug.WriteLine(await response.Content.ReadAsStringAsync());
var status = new ZemoseStatus();
status.Status = “NoInternet”.Translate();
status.StatusCode = “NoInternet”;
var rootnode = new RootNode();
rootnode.status = status;
rootnode.data = null;
return rootnode;
}
}

0

Решение

У меня был активен дополнительный слот развертывания, этот слот получил 10% трафика и был позже удален, но изменения не вступили в силу при тестировании на рабочей странице, где 10% трафика все еще направлялось на старый удаленный слот. Когда я удалил эту статическую маршрутизацию, проблема была решена. Я предполагаю, что это произошло из-за трафика, направляемого на этот удаленный слот.

0

Другие решения

Других решений пока нет …