2011-02-04 95 views
7

我有一個非常具體的問題有關Dns.GetHostEntry:Dns.GetHostEntry錯誤情況和解決方法

服務使用Dns.GetHostEntry檢索主機的所有IP不會忽略,使用的主機名。這一直運行良好。 在特定的客戶,查詢特定主機時,Dns.GetHostEntry拋出「沒有這樣的主機是已知的」錯誤。只有在嘗試解析位於與安裝服務的計算機不同的域上的主機時,纔會出現此問題。該服務已經工作了一段時間,但最近停止工作,拋出「沒有這樣的主機是已知的」錯誤(遺憾的是,沒有堆棧跟蹤可用)。 Nslookup雖然工作,沒有問題。 有問題的服務是用VB.NET編寫的,面向.NET Framwork 2.0。

.NET 3.0條目中的註釋(http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx)指出主機的反向DNS條目可能存在問題,但我無法在測試網絡上重現問題,即使所有反向刪除查找區域(對於其他.NET版本,有更多評論,都有類似的問題)[編輯:]即使是故意添加一個錯誤的PTR記錄也不會使我的測試機器上出現問題

[編輯2:]發生錯誤的唯一原因是斷開網絡適配器,從而使DNS服務器不可用,即使正向解析仍然因緩存而起作用。

所以,我的問題是:

  1. 在哪些情況下GetHostEntry拋出此特定錯誤?
  2. 它使用哪種分辨率方法?如果我沒有弄錯,它使用非託管WinSock函數getnameinfo(http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx),:「名稱解析可以通過域名系統(DNS),本地主機文件,或其他命名機制」。
  3. 任何想法爲什麼突然失敗的機器在其他域(但不是在同一域的機器)?

感謝和問候, cun83

+0

您是否在本地計算機上「ipconfig/flushdns」並在修改了PTR記錄後重新啓動DNS服務器?您可能仍然在使用緩存的結果 – 2011-02-04 16:16:25

回答

5

我個人一直使用Dns.GetHostAddresses。它總是給我一個可靠的結果。

關於爲什麼Dns.GetHostEntry給你指定的錯誤,我認爲這是由於DnsGetHostEntry在返回你的IP地址之前會嘗試進行反向DNS查找。如果反向DNS查找失敗,它會給你「沒有這樣的主機是已知的」。

據我所知,Dns.GetHostAddresses只是返回IP地址。