gpt4 book ai didi

c# - WebRequest中如何模拟DNS名称解析失败?

转载 作者:可可西里 更新时间:2023-11-01 10:48:51 27 4
gpt4 key购买 nike

最近发现在C#中使用async socket 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 协议(protocol)的属性
  4. 高级
  5. DNS 选项卡
  6. 添加 DNS 服务器 IP (*)
  7. 关闭所有网络窗口
  8. 运行:“ipconfig/flushdns”

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

关于c# - WebRequest中如何模拟DNS名称解析失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com