У меня проблема с подключением к стороннему API с использованием библиотеки DevDefined OAuth для C #:
https://github.com/bittercoder/DevDefined.OAuth
Соединение работает нормально уже более года, но в последние два дня оно начинало прерываться каждые несколько часов. Сообщение об исключении:
The request was aborted: Could not create SSL/TLS secure channel
Он работает как обычно после перезапуска пула приложений, но затем останавливает аутентификацию через несколько часов - это заставляет меня думать, что он не закрывает HttpWebRequest, и мы пропускаем соединения и в конечном итоге заканчиваем.
Подобный вопрос предполагает, что KeepAlive мог бы решить эту проблему, но это не помогло мне: ASP.NET - Запрос был прерван: не удалось создать безопасный канал SSL / TLS
Но код довольно сложный, и объект HttpWebRequest передается во многие другие функции после создания. Я не вижу, где его закрыть. А также, я не знаю, как закрыть HttpWebRequest, поэтому мой вопрос:
- Как мне найти, где закрыть этот HttpWebRequest?
- Как закрыть HttpWebRequest? Или ответ должен быть уничтожен?
Код DevDefined выглядит следующим образом:
public virtual HttpWebRequest ToWebRequest()
{
var request = (HttpWebRequest) WebRequest.Create(description.Url);
// .. snip setting request properties
return request;
}
Функция ToWebRequest()
вызывается в нескольких местах, и из этих мест Ответ извлекается и возвращается к еще большему количеству методов. Так что его трудно отследить. Я нашел этот метод, который, кажется, показывает, что Ответ используется, но не утилизируется:
public override string ToString()
{
if (string.IsNullOrEmpty(ResponseBody))
{
ResponseBody = ToWebResponse().ReadToEnd();
}
return ResponseBody;
}