Я встроил элемент управления браузера в форму .Net и скомпилировал его как исполняемый файл окна.Элемент управления браузера отображает наш просмотрщик изображений HTML5.Приложение открывает сокеты, чтобы оно могло прослушивать «push» запросы от различных серверов.Это позволяет передавать изображения на рабочие столы отдельных пользователей.
Когда поступает входящий push-запрос изображения, приложение вызывает службу REST, используя RESTSharp, чтобы сгенерировать токен, который зритель может использовать для отображения изображения.
Пока запросы постоянно поступают, все работает отлично.Если наступает затишье (кажется, 10 минут), то запрос RESTSharp истекает.Как будто создание нового экземпляра артефактов RESTSharp повторно использует старые в попытке оптимизации .Net.
Вот код RESTSharp, который я использую:
private async Task<string> postJsonDataToUrl(string lpPostData) {
IRestClient client = new RestClient(string.Format("{0}:{1}", MstrScsUrlBase, MintScsUrlPort));
IRestRequest request = new RestRequest(string.Format("{0}{1}{2}", MstrScsUrlContextRoot, MstrScsUrlPath, SCS_GENERATE_TOKEN_URL_PATH));
request.Timeout = 5000;
request.ReadWriteTimeout = 5000;
request.AddParameter("application/json", lpPostData, ParameterType.RequestBody);
IRestResponse response = await postResultAsync(client, request);
return response.Content;
} // postJsonDataToUrl
private static Task<IRestResponse> postResultAsync(IRestClient client, IRestRequest request) {
return client.ExecutePostTaskAsync(request);
} // PostResultAsync
Это строка, где происходит тайм-аут:
IRestResponse response = await postResultAsync(client, request);
Я попытался переписать это, используя .Net HttpWebRequest, и у меня возникла та же проблема.
Если я увеличу тайм-ауты RESTSharp, яЯ могу звонить на сервер (используя другой клиент), пока приложение «истекает», поэтому я знаю, что проблема не в сервере.
Начальная версия кода не ожидаластруктура асинхронного вызова - это было добавлено как попытка получить больше информации о проблеме.
Я не получаю никаких ошибок, кроме времени ожидания REST.
У меня был ограниченный успех с форсированиемСборка мусора с этим звонком:
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
Есть мысли?