C# 如何在WebRequest中模拟DNS名称解析失败?
最近发现,在C#中使用异步套接字API实际上在调用线程上执行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引
我想找到一种方法来模拟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);
}
}
汉斯先生,好主意。
我将只添加确切的步骤:
(*)它必须是可以解析但不返回DNS回复的IP(google.com很好),因为否则DHCP返回的响应太快,地址无法解析,如果服务器存在,则不应返回响应,因此将达到超时。只需在网络适配器的TCP/IP属性中选择一个伪造的DNS服务器地址。