2011-02-04 37 views
7

Tôi có một vấn đề rất cụ thể liên quan đến Dns.GetHostEntry:điều kiện lỗi Dns.GetHostEntry và phương pháp giải quyết

Một dịch vụ sử dụng Dns.GetHostEntry để lấy tất cả Adresses chỉ IP của một máy chủ, sử dụng tên của các máy chủ. Điều này đã luôn luôn làm việc tốt. Tại một khách hàng cụ thể, Dns.GetHostEntry ném lỗi "không có máy chủ được biết đến" khi truy vấn các máy chủ cụ thể. Sự cố chỉ xảy ra khi cố gắng giải quyết các máy chủ lưu trữ trên một tên miền khác với máy mà dịch vụ được cài đặt trên đó. Dịch vụ này đã hoạt động trong một thời gian, nhưng gần đây đã ngừng hoạt động, ném lỗi "không có máy chủ được biết đến" (đáng tiếc là không có sẵn dấu vết ngăn xếp). Nslookup hoạt động mặc dù không có vấn đề gì ở đó. Dịch vụ được đề cập được viết bằng VB.NET, nhắm mục tiêu .NET Framwork 2.0.

Nhận xét trong mục MSDN cho .NET 3.0 (http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx xác nhận rằng có thể có vấn đề với mục DNS đảo ngược cho máy chủ, nhưng tôi không thể tái tạo sự cố trên mạng thử nghiệm, ngay cả với tất cả ngược lại tra cứu khu xóa (có nhiều ý kiến ​​cho các phiên bản .NET khác, tất cả đều có vấn đề tương tự). [EDIT:] Thậm chí deliberatly addind một bản ghi PTR sai không làm cho vấn đề xảy ra trên máy tính thử nghiệm của tôi

[EDIT2:] Điều duy nhất khiến lỗi xuất hiện là ngắt kết nối bộ điều hợp mạng và do đó làm cho Máy chủ DNS không khả dụng, mặc dù việc giải quyết chuyển tiếp vẫn hoạt động do bộ đệm ẩn.Vì vậy, câu hỏi của tôi là:

  1. Trong điều kiện nào GetHostEntry ném lỗi cụ thể này?
  2. Phương pháp phân giải nào sử dụng? Nếu tôi không nhầm nó sử dụng hàm WinSock không được quản lý getnameinfo (http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx) ,: "Độ phân giải tên có thể là Hệ thống tên miền (DNS), tệp máy chủ cục bộ, hoặc bằng các cơ chế đặt tên khác".
  3. Bất kỳ ý tưởng nào tại sao điều này đột nhiên bị lỗi đối với các máy trên miền khác (nhưng không phải cho các máy trên cùng một tên miền)?

Thanks and best regards, cun83

+0

Bạn đã "ipconfig/flushdns" trên máy cục bộ và khởi động lại máy chủ DNS sau khi bạn sửa đổi bản ghi PTR chưa? Có thể bạn vẫn đang sử dụng kết quả đã lưu trong bộ nhớ cache –

+0

Có, tôi đã xóa bộ nhớ cache, thậm chí tôi đã khởi động lại Dịch vụ máy chủ DNS và Dịch vụ khách hàng chỉ để đảm bảo không có gì được lưu vào bộ nhớ cache. – cun83

Trả lời

5

Cá nhân tôi luôn luôn sử dụng Dns.GetHostAddresses. Nó luôn mang lại cho tôi một kết quả đáng tin cậy.

Về lý do tại sao Dns.GetHostEntry cung cấp cho bạn lỗi được chỉ định, tôi nghĩ rằng thực tế là DnsGetHostEntry sẽ tìm cách thực hiện tra cứu DNS ngược trước khi trả lại địa chỉ IP cho bạn. Nếu tra cứu DNS đảo ngược không thành công, nó sẽ cung cấp cho bạn "không có máy chủ nào được biết đến".

Theo như tôi biết, Dns.GetHostAddresses chỉ trả lại địa chỉ IP.

Các vấn đề liên quan