У меня есть Windows-сервис .Net-клиент, соединяющийся с веб-сервисом PHP. Основная идея: клиент .Net отправляет информацию в php для записи в базу данных, этот процесс занимает около 1 минуты, проблема в том, что когда требуется больше, HttpResponseMessage поставляется с BadGateway, забавно то, что php на самом деле пишет все, что имеет для записи в базу данных, даже если это занимает более 1 мин. Я пытаюсь установить TimeOut для HttpClient на 10 минут:
//code for the stuff making
Logger.WriteLog("Sending Stuff");
using (var client = new HttpClient())
{
client.Timeout = new TimeSpan(0,10,0);
httpResponseMessage = client.PostAsync(url, content).Result;
Logger.WriteLog(httpResponseMessage.StatusCode.ToString());
Logger.WriteLog(httpResponseMessage.ToString());
}
Но, тем не менее, он терпит неудачу с более чем 1-минутным ответом, веб-сервис php также должен иметь время ожидания 10 минут. Я регистрирую полный ответ, и я получил плохой шлюз:
2016-04-25 11:12:24,045 INFO - *Sending Stuff
2016-04-25 11:13:23,413 INFO - OK
2016-04-25 11:13:23,414 INFO - StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
Connection: close
Cache-Control: no-store, must-revalidate, no-cache, post-check=0, pre-check=0
Date: Mon, 25 Apr 2016 14:12:37 GMT
Set-Cookie: PHPSESSID=lbhsue3pstc8smqihkoe0nouj1; path=/
Server: Apache/2.2.15
Server: (CentOS)
X-Powered-By: PHP/5.6.19
Content-Length: 52
Content-Type: application/json; charset=UTF8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
2016-04-25 11:14:42,931 INFO - *Sending Stuff
2016-04-25 11:15:44,273 INFO - BadGateway
2016-04-25 11:15:44,274 INFO - StatusCode: 502, ReasonPhrase: 'Proxy Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Connection: close
Date: Mon, 25 Apr 2016 14:14:43 GMT
Content-Length: 499
Content-Type: text/html; charset=iso-8859-1
}
//------------------------------------------------------------------------------------------------------------------------------------------------
2016-04-25 11:25:28,471 INFO - *Sending Stuff
2016-04-25 11:26:27,495 INFO - OK
2016-04-25 11:26:27,497 INFO - StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
Connection: close
Cache-Control: no-store, must-revalidate, no-cache, post-check=0, pre-check=0
Date: Mon, 25 Apr 2016 14:25:41 GMT
Set-Cookie: PHPSESSID=ja6f30mqlnhtdl8p44hddr43c3; path=/
Server: Apache/2.2.15
Server: (CentOS)
X-Powered-By: PHP/5.6.19
Content-Length: 52
Content-Type: application/json; charset=UTF8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
}
Я надеялся, что тайм-аут, где причина плохой ворота, но это не имеет значения. Может кто-нибудь сказать мне, каковы возможности badgateway, даже когда процесс в php завершает задачу. Заранее спасибо!
PD: Извините за мой английский
Тайм-аут на конце .NET не должен генерировать код состояния HTTP. Следует выдать отдельное исключение тайм-аута. Если вы видите код состояния HTTP, он должен исходить со стороны сервера.
Вы уверены, что сам веб-сервер (на стороне PHP) не настроен с тайм-аутом для сценариев?
Других решений пока нет …