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



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

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

示例:(我希望能够模拟的内容)
如果 DNS 解析失败,代码将永远不会到达 (1),但在一段时间超时延迟后,(2) 中的 EndGetResponse 将引发异常。

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);
    }
}

谢谢汉斯,好主意。
我将只添加确切的步骤:

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

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

最新更新