Клиент REST не ждет службы REST API - PullRequest
1 голос
/ 29 июня 2019

У меня есть REST API Service. Ниже приведен метод API-контроллера.

public class ExcelUploadController : ApiController
{
    [HttpPost]
    public async Task<HttpResponseMessage> Upload(HttpRequestMessage request)
    {
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        HttpPostedData postedData = await Request.Content.ParseMultipartAsync();
        ProcessFile postedFile = new ProcessFile(postedData);

        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(postedFile.Process())
        };
    }
  }

Возвращает данные в формате JSON загруженного файла Excel.

И ниже мой клиентский код, который использует RESTSharp

int ReadWriteTimeout = -1;
RestClient restClient = new RestClient("https://restfulservice.domain.com");
RestRequest restRequest = new RestRequest("api/excelupload/Upload");

int readWriteTimeout = restRequest.ReadWriteTimeout > 0
       ? restRequest.ReadWriteTimeout
       : ReadWriteTimeout;

restRequest.ReadWriteTimeout = -1;
restClient.Timeout = -1;
restClient.ReadWriteTimeout = -1;
restRequest.Method = Method.POST;
restRequest.AddHeader("Content-Type", "multipart/form-data");
restRequest.AddFile("content", location);
restRequest.AddParameter("DetailLineNumber", "4");

var response = restClient.Execute<List<ActualsDataViewModel>>(restRequest);

Я ожидаю, что мой клиент будет ждать, пока служба завершит обработку. Но клиент не ждет, и объект ответа пуст, означает, что код состояния равен 0. И response.Data имеет значение null.

Если я запускаю ту же службу API REST на локальном хосте и заменяю приведенный ниже код в клиенте, то он работает отлично.

 RestClient restClient = new RestClient("http://localhost:5100");

Почему, если на сервере (IIS) работает одна и та же служба, клиент не ожидает ответа?

1 Ответ

0 голосов
/ 29 июня 2019

Размещение ответа, чтобы сэкономить время других. Я получил это работает.

Я добавил строку ниже перед вызовом REST API. Этот ответ был предложен @Hans Vonn на Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом второй ответ.

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
...