У меня очень специфическая проблема, связанная с 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