2

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

Insentive:许多 .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);
    }
}
4

1 回答 1

0

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

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

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

于 2012-10-18T10:12:00.917 回答