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

时间:2012-10-17 17:07:14

标签: c# windows dns httpwebrequest webrequest

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

Insentive :许多.NET async 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 个答案:

答案 0 :(得分:0)

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

  1. 控制面板 - >网络 - >更改适配器设置
  2. 双击您使用的连接
  3. 您使用的TCP协议的属性
  4. 高级
  5. DNS标签
  6. 添加DNS服务器IP(*)
  7. 关闭所有网络窗口
  8. 运行:“ipconfig / flushdns”
  9. (*)它必须是可以解析的IP,但不会返回DNS回复(google.com很好),否则DHCP将返回响应太快,地址无法解析,如果服务器存在,它应该不返回响应,因此将达到超时。