2012-10-17 34 views
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); 
    } 
} 
+2

只需在網絡適配器的TCP/IP屬性中選擇一個僞造的DNS服務器地址即可。 –

回答

0

Thx Hans,好主意。
我將剛纔添加的具體步驟:

  1. 控制面板 - >網絡 - >更改適配器設置
  2. 雙擊您TCP協議的使用
  3. 屬性的連接使用
  4. 高級
  5. DNS選項卡
  6. 添加DNS服務器的IP(*)
  7. 關閉所有網絡窗口
  8. 運行:「IPCONFIG/FLUSHDNS」

(*),它必須是IP可以解決,但是沒有返回DNS應答(google.com還是不錯的),否則DHCP會返回響應也快,該地址無法解析,如果服務器存在,則不應返回響應,以便達到超時。

相關問題