繁体   English   中英

如何在WebRequest中模拟DNS名称解析失败?

[英]How to simulate DNS name resolution failure in WebRequest?

最近发现,在C#中使用异步套接字API实际上会在调用线程上执行DNS解析,因此,如果解析存在问题,它将一直挂起直到超时。
我想找到一种无需接触运行代码即可模拟DNS解决问题的方法,以便质量检查人员也可以在测试中使用它。

敏感 :许多.NET异步API(例如WebRequest,Image(WinForms,WPF))在调用线程上执行DNS解析,这可能导致UI挂起。

示例:(我希望能够模拟什么)
如果DNS无法解析,则代码将永远无法到达(1),但在某些超时延迟后,EndGetResponse(2)中会引发异常。

class Program
{
    static void Main()
    {
        var request = WebRequest.Create("http://www.google.com");
        request.BeginGetResponse(WebRequestCallback, request);
        // (1)
        Console.ReadLine();
    }
    private static void WebRequestCallback(IAsyncResult ar)
    {
        // (2)
        var response = ((WebRequest) ar.AsyncState).EndGetResponse(ar);
    }
}

Thx Hans,好主意。
我将添加确切的步骤:

  1. 控制面板->网络->更改适配器设置
  2. 双击您使用的连接
  3. 您使用的TCP协议的属性
  4. 高级
  5. DNS标签
  6. 添加DNS服务器IP(*)
  7. 关闭所有网络窗口
  8. 运行:“ ipconfig / flushdns”

(*)必须是可以解析但不会返回DNS答复的IP(google.com很好),因为否则DHCP会返回响应太快,导致地址无法解析,并且如果服务器存在,则不应返回响应因此将达到超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM