最近发现在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);
}
}
答案 0 :(得分:0)
Thx Hans,好主意。
我将添加确切的步骤:
(*)它必须是可以解析的IP,但不会返回DNS回复(google.com很好),否则DHCP将返回响应太快,地址无法解析,如果服务器存在,它应该不返回响应,因此将达到超时。