最近发现,在 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);
}
}
谢谢汉斯,好主意。
我将只添加确切的步骤:
- 控制面板 ->网络 ->更改适配器设置
- 双击您使用的连接
- 您使用的 TCP 协议的属性
- 高深
- "DNS"选项卡
- 添加 DNS 服务器 IP (*)
- 关闭所有网络窗口
- 运行:"ipconfig/flushdns"
(*) 它必须是可以解析但不返回 DNS 回复的 IP(google.com 是好的),否则 DHCP 将返回响应太快,以至于地址无法解析,如果服务器存在,它不应该返回响应,因此将达到超时。