使用针对C#的DevDefined OAuth库连接到第三方API时遇到问题:
https://github.com/bittercoder/DevDefined.OAuth
连接已经运行了一年多了,但在最近两天它已经开始每隔几个小时失败一次。异常消息是:
The request was aborted: Could not create SSL/TLS secure channel
在应用程序池重新启动后它正常工作,但几小时后停止验证 - 这让我觉得它没有关闭HttpWebRequest,我们正在泄漏连接并最终耗尽。
类似的问题表明KeepAlive可以解决这个问题,但它对我没有帮助:ASP.NET - The request was aborted: Could not create SSL/TLS secure channel
但代码非常复杂,HttpWebRequest对象在创建后传递给许多其他函数。我看不出它在哪里关闭它。而且,我不知道如何关闭HttpWebRequest,所以我的问题是:
DevDefined代码如下所示:
public virtual HttpWebRequest ToWebRequest()
{
var request = (HttpWebRequest) WebRequest.Create(description.Url);
// .. snip setting request properties
return request;
}
在几个地方调用函数ToWebRequest()
,从那些地方提取响应并返回更多方法。因此证明难以追踪它。我确实发现这个方法似乎表明正在使用Response而不是处置:
public override string ToString()
{
if (string.IsNullOrEmpty(ResponseBody))
{
ResponseBody = ToWebResponse().ReadToEnd();
}
return ResponseBody;
}