Тайм-аут проблема с PostAsJsonAsync .Net 4.0 - PullRequest
0 голосов
/ 06 ноября 2019

Я вызываю веб-интерфейс через файл dll, который используется клиентским настольным приложением .net. Файл Dll записан в .Net 4.0.

Иногда я получаю частые ошибки в этой строке.

var postResponse = client.PostAsJsonAsync(path, Input).Result;

После сообщения об ошибке я проверяю файлы журнала IIS и веб-службы. Что касается файлов журнала, приведенная выше строка кода не попала в веб-службу, поскольку веб-метод регистрирует все действия в своем собственном файле журнала.

Есть ли способ избежать ошибок тайм-аута.

Код файла Dll

 private T CallService<T>(string path)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = EndpointAddress;
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.Timeout = TimeSpan.FromSeconds(30);

            var response = client.PostAsJsonAsync(path, Input).Result;

            if (response.IsSuccessful)
            {
                var serviceResponse = response.Content.ReadAsAsync<T>().Result;

               // return service response;
            } 
            else
            {
               // return default (T)
            }
        }
    }

Метод веб-службы

       [HttpPost]
        public CusResponse GetCustomer(CustomerOperationInput input)
        {


        }

Вот данные заголовка, когда они истекают

{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Pragma: no-cache
  Connection: close
  Cache-Control: no-cache
  Date: Wed, 06 Nov 2019 11:06:45 GMT
  Server: Microsoft-IIS/7.5
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Length: 36
  Content-Type: application/json; charset=utf-8
  Expires: -1
}}

Ошибка в файле трассировки IIS

<EventData>
  <Data Name="ContextId">{00000000-0000-0000-230F-008000000019}</Data>
  <Data Name="ModuleName">ManagedPipelineHandler</Data>
  <Data Name="Notification">128</Data>
  <Data Name="HttpStatus">500</Data>
  <Data Name="HttpReason">Internal Server Error</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

enter image description here

enter image description here

1 Ответ

1 голос
/ 06 ноября 2019

Это не тайм-аут. Тайм-аут означает: «Я перестал ждать, потому что не получил ответа».

Однако вы получили ответ от сервера. Тот факт, что у вас есть «данные заголовка», показывает это. Ответ был 500 Внутренняя ошибка сервера . Это произойдет автоматически в ASP.NET при возникновении необработанного исключения, но оно также может быть отправлено явно. В любом случае это означает, что случилось что-то плохое.

Заголовок Content-Type установлен на application/json, поэтому в теле ответа может быть сообщение об ошибке, которое вы можете использовать, чтобы выяснить, что пошло не так.

Итак, прочитайте текст ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...