C # Закрытие HttpWebRequest DevDefined - PullRequest
       28

C # Закрытие HttpWebRequest DevDefined

2 голосов
/ 09 августа 2011

У меня проблема с подключением к стороннему 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;
}
...