使HttpWebRequest尊重DNS更改的正确方法

时间:2019-05-17 19:34:42

标签: httpwebrequest servicepoint

我注意到,频繁使用的HttpWebRequest永远不会关闭其基础连接,这导致DNS更改对随后连接到同一终结点的HttpWebRequest没有任何影响。

经过研究,我认为这可能是由于ServicePoint.ConnectionLeaseTimeout的默认值为Timeout.Infinite。

基于此处的ServicePoint.ConnectionLeaseTimeout代码:https://referencesource.microsoft.com/#system/net/System/Net/ServicePoint.cs,419

以及在此处使用ConnectionLeaseTimeoutQueue:https://referencesource.microsoft.com/#system/net/system/Net/_Connection.cs,640

似乎重复设置ConnectionLeaseTimeout是安全的,因为它仅在更改值时才更新基础计时器。

// called frequently enough that the underlying connection is never idle
protected override void ExecuteRequest(Uri endpoint, Uri requestUri)
{
    try
    {
        HttpWebRequest httpRequest = WebRequest.CreateHttp(new Uri(endpoint, requestUri));
        // is this the proper way to do this?
        httpRequest.ServicePoint.ConnectionLeaseTimeout = 30 * 1000;

以上代码是否是确保.NET每隔30秒重新建立与更新的DNS值的新连接的正确方法?我意识到,由于TTL,流量移动可能需要30秒以上的时间。

0 个答案:

没有答案