Фон
Наш API позволяет пользователям загружать большие файлы, такие как PDF, JPG и PNG. Недавно мы получили тонну запросов, которые истекают, когда сервер простаивает некоторое время. Наши клиенты будут ждать 2 минуты, а затем получат сообщение об ошибке 500.
Мы используем Azure Управление API для предоставления клиентам документации и доступа к API.
Клиент -> Управление API -> Веб-приложение
Однако, если посмотреть на понимание, становится ясно, что проблема заключается в управлении API и нашим веб-приложением, в котором мы настроили SSL-сертификат .
Проблема
Проблема, как представляется, заключается в том, что отправка большого запроса POST, содержащего сертификат SSL для «пробуждения» API, делает его тупиковым. Я также отлаживал API, используя понимание приложения, но кажется, что запрос вообще не получен ни одной операцией.
После отладки проблемы с совершенно новым проектом Web API и Web App у меня есть сужается до того, что тайм-аут возникает только в том случае, если:
- Сервер настроен только для HTTPS и / или требуется сертификат клиента.
- Я оставлю сервер на 5-10 минут перед отправкой моего первого запроса.
- Мой первый запрос содержит большой файл, например PDF-файл размером 2 МБ.
Для устранения проблемы я настроил следующие ресурсы.
Web API
Я создал новый проект, ASP. NET Web API, framework 4.6. Я добавил только простой файловый контроллер.
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace DebugCertificate.API.Controllers
{
public class FilesController : ApiController
{
public HttpResponseMessage Post()
{
// Success
return Request.CreateResponse(HttpStatusCode.OK, "Welcome to the POST files resource!");
}
public HttpResponseMessage Get()
{
// Success
return Request.CreateResponse(HttpStatusCode.OK, "Welcome to the GET files resource!");
}
}
}
Веб-приложение
Я установил совершенно новое Azure Веб-приложение и настроил его со следующими настройками.
Действия по воспроизведению проблемы с почтальоном:
- Подождите 5-10 минут.
- Отправьте запрос POST на ресурс / api / files, содержащий большой файл (в данном случае 2 МБ).
- Тайм-аут наступает через 120 секунд.
- Пока вы отправляете только большой запрос POST, вы можете повторить шаг 2.
Обратите внимание, что мне даже не нужно отправлять клиента сертификат с этим запросом на возникновение проблемы.
Проблема не возникнет
- Когда требуется сертификат клиента и отключен только HTTPS.
- Когда вы сначала отправляете запрос GET / api / files и в течение 5-10 минут отправляете тот же запрос POST, который описан в шаге 2 выше.
* 108 6 *
Возможные отведения После диагностики веб-приложения в Azure я обнаружил ошибки, сгенерированные этими запросами. Я гуглил это описание, но не нашел никакой информации, которая бы исправила мои проблемы.
Я нашел что-то похожее, но эта статья звучит так это между клиентом и API-интерфейсом, где мы не настроили SSL-сертификат. Ищите зеленое поле TIP.
Как защитить API с помощью аутентификации сертификата клиента в управлении API
Я также нашел эту статью, содержащую несколько способов решения этой проблемы, но «заправка» API дополнительным запросом выглядит немного хлопотно.
Запрос сертификата клиента HTTPS зависает, когда Сервер обрабатывает большой запрос PUT / POST
Вопросы
- Почему это происходит?
- Есть ли обходной путь, который не включает "заправку" API? Может быть, простая настройка Web.config?
Позвольте мне сейчас, если потребуется дополнительная информация!