Главный замысел таков:
- Есть определенное приложение, которое устанавливается как служба Windows
- Их может быть несколько в сети
- Каждый из них предоставляет некоторый интерфейс для сети (подумайте об этом как «удаленное управление» или «конфигурация» - что-то в этом роде)
- . Затем есть другое приложение, которое действует как клиент для этого интерфейса (используя те же аналогии - " удаленный контроллер »или« инструмент настройки »)
- Задача последнего состоит в том, чтобы вынюхивать все экземпляры первого в сети, отображать их в виде списка для пользователя и позволять пользователю указывать их в разных местах, используя это открытый интерфейс (т.е. «удаленное управление» или «настройка» их)
- Для простоты предположим, что eve rybody находится в одной сети, то есть все могут слышать UDP-трансляции друг друга.
Довольно просто, а? Раньше я создавал такие вещи дюжиной в былые времена, используя механизм обнаружения на основе широковещательной рассылки UDP.
Но теперь я подумал, что буду крутым и модным, и выберу отличный WCF Discovery в режиме Ad Hoc. И это работает! Кто мог сказать? : -)
Но не совсем.
Как было отмечено до меня здесь и там , обнаружение возвращает жестко запрограммированный URL из конфигурации службы.То есть, если в файле конфигурации службы есть
, то это именно то, что Я собираюсь получить от клиента обнаружения, включая часть "localhost".
Излишне говорить, что если я попытаюсь вызвать службу, используя этот URL, результат не впечатлит.
Итак, возникает вопрос: как мне сделать так, чтобы клиент обнаружения выдавал мне пригодный для использования URL вместо мусора типа localhost?
Чтобы сэкономить всеобщее время, пара мыслей, которые не работают:
- Изменить файл конфигурации службы во время развертывания, кодируя его реальный IP-адрес или имя компьютера.
Не работает, потому что IP и имя компьютера могут измениться.
- Сконфигурируйте службу из кода (по крайней мере частично), используя текущий IP-адрес или имя компьютера для создания URL-адреса.
Не работает. Имя машины бесполезно, потому что в сети может не быть DNS. IP бесполезен, потому что компьютер может находиться в нескольких сетях одновременно и, следовательно, иметь несколько IP-адресов (это не гипотетически, у нас такая ситуация есть ). Какой из них использовать?
Другими словами, мне нужно не настраивать службу, а скорее заставить клиент обнаружения дать мне адрес, с которого пришел ответ на обнаружение.
задан Community 23 May 2017 в 12:00
поделиться