2
最近發現,在C#中使用異步套接字API實際上會在調用線程上執行DNS解析,因此如果解析出現問題,它將掛起直到超時。
我想找到一種方法來模擬DNS解決問題,而無需觸摸正在運行的代碼,以便QA也可以在測試中使用它。
如何在WebRequest中模擬DNS名稱解析失敗?
Insentive:很多.NET異步API的喜歡的WebRequest,圖片(的WinForms,WPF)執行調用線程,可導致用戶界面掛起的DNS解析。
例子:(我想什麼能夠模擬)
如果DNS無法解析的代碼將永遠達不到(1),但一個例外將從EndGetResponse在被拋出(2)經過一些超時延遲。
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/IP屬性中選擇一個僞造的DNS服務器地址即可。 –