У меня очень специфическая проблема с Dns.GetHostEntry:
Служба использует Dns.GetHostEntry для получения всех IP-адресов хоста, используя имя хоста. Это всегда работало нормально. У конкретного клиента Dns.GetHostEntry выдает ошибку «такой хост неизвестен» при запросе определенных хостов. Проблема возникает только при попытке разрешить хосты, находящиеся в домене, отличном от машины, на которой установлена служба. Служба работала в течение достаточно долгого времени, но недавно перестала работать, выдавая ошибку «такой хост неизвестен» (к сожалению, трассировка стека недоступна). Но Nslookup работает, проблем нет. Рассматриваемая служба написана на VB.NET и ориентирована на .NET Framwork 2.0.
Комментарии в записи MSDN для .NET 3.0 (http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx указывают на то, что может быть проблема с обратными записями DNS для хостов, но я не смог чтобы воспроизвести проблему в тестовой сети, даже при удалении всех зон обратного просмотра (есть больше комментариев для других версий .NET, все имеют аналогичные проблемы) [EDIT:] Даже преднамеренное добавление неправильной записи PTR не приводит к возникновению проблемы. на моей тестовой машине.
[EDIT2:] Единственное, что вызвало ошибку, — это отключение сетевого адаптера и, таким образом, делает DNS-сервер недоступным, хотя прямое разрешение все еще работало из-за кэширования.
Итак, мои вопросы:
- При каких условиях GetHostEntry выдает эту конкретную ошибку?
- Какие методы разрешения он использует? Если я не ошибаюсь, он использует неуправляемую функцию WinSock getnameinfo (http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx): "Разрешение имен может осуществляться системой доменных имен (DNS), локальный файл hosts, или с помощью других механизмов именования".
- Любые идеи, почему это внезапно выходит из строя для машин в другом домене (но не для машин в том же домене)?
Спасибо и с наилучшими пожеланиями, cun83