WCF Discovery возвращает жестко запрограммированный URL.

Главный замысел таков:

  1. Есть определенное приложение, которое устанавливается как служба Windows
  2. Их может быть несколько в сети
  3. Каждый из них предоставляет некоторый интерфейс для сети (подумайте об этом как «удаленное управление» или «конфигурация» - что-то в этом роде)
  4. . Затем есть другое приложение, которое действует как клиент для этого интерфейса (используя те же аналогии - " удаленный контроллер »или« инструмент настройки »)
  5. Задача последнего состоит в том, чтобы вынюхивать все экземпляры первого в сети, отображать их в виде списка для пользователя и позволять пользователю указывать их в разных местах, используя это открытый интерфейс (т.е. «удаленное управление» или «настройка» их)
  6. Для простоты предположим, что eve rybody находится в одной сети, то есть все могут слышать UDP-трансляции друг друга.

Довольно просто, а? Раньше я создавал такие вещи дюжиной в былые времена, используя механизм обнаружения на основе широковещательной рассылки UDP.

Но теперь я подумал, что буду крутым и модным, и выберу отличный WCF Discovery в режиме Ad Hoc. И это работает! Кто мог сказать? : -)

Но не совсем. Как было отмечено до меня здесь и там , обнаружение возвращает жестко запрограммированный URL из конфигурации службы.То есть, если в файле конфигурации службы есть , то это именно то, что Я собираюсь получить от клиента обнаружения, включая часть "localhost".

Излишне говорить, что если я попытаюсь вызвать службу, используя этот URL, результат не впечатлит.

Итак, возникает вопрос: как мне сделать так, чтобы клиент обнаружения выдавал мне пригодный для использования URL вместо мусора типа localhost?

Чтобы сэкономить всеобщее время, пара мыслей, которые не работают:

  1. Изменить файл конфигурации службы во время развертывания, кодируя его реальный IP-адрес или имя компьютера.
    Не работает, потому что IP и имя компьютера могут измениться.
  2. Сконфигурируйте службу из кода (по крайней мере частично), используя текущий IP-адрес или имя компьютера для создания URL-адреса.
    Не работает. Имя машины бесполезно, потому что в сети может не быть DNS. IP бесполезен, потому что компьютер может находиться в нескольких сетях одновременно и, следовательно, иметь несколько IP-адресов (это не гипотетически, у нас такая ситуация есть ). Какой из них использовать?

Другими словами, мне нужно не настраивать службу, а скорее заставить клиент обнаружения дать мне адрес, с которого пришел ответ на обнаружение.

10
задан Community 23 May 2017 в 12:00
поделиться