Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WebRequest中模拟DNS名称解析失败?_C#_Windows_Dns_Httpwebrequest_Webrequest - Fatal编程技术网

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

C# 如何在WebRequest中模拟DNS名称解析失败?,c#,windows,dns,httpwebrequest,webrequest,C#,Windows,Dns,Httpwebrequest,Webrequest,最近发现,在C#中使用异步套接字API实际上在调用线程上执行DNS解析,因此如果解析有问题,它将挂起直到超时。 我想找到一种方法来模拟DNS解决问题,而不接触正在运行的代码,这样QA也可以在测试中使用它。 Insentive:许多.NET异步API(如WebRequest、Image(WinForms、WPF))在调用线程上执行DNS解析,这可能导致UI挂起 示例:(我希望能够模拟的内容) 如果DNS解析失败,代码将永远不会到达(1),但在超时延迟后,将从(2)中的EndGetResponse引

最近发现,在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);
    }
}

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

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

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

    只需在网络适配器的TCP/IP属性中选择一个伪造的DNS服务器地址。