Как я могу получить адрес / порт прослушивания службы WCF? - PullRequest
2 голосов
/ 05 февраля 2010

У меня есть служба WCF , прослушивающая динамически выделенный порт в реестре служб Windows. Как я могу найти адрес для прослушивания этой службы из другого приложения C #? Или хотя бы порт этого сервиса?

Спасибо, Adriana

1 Ответ

7 голосов
/ 08 февраля 2010

Вы можете вывести фактические «Слушатели» изнутри реализации службы после открытия ServiceHost, используя свойство «ChannelDispatcher».

Например:

foreach (var channelDispatcher in serviceHost.ChannelDispatchers)
{
            Console.WriteLine(channelDispatcher.Listener.Uri);
}

URI слушателя будет содержать порт TCP / IP, на котором находится служба. Обратите внимание, что это, конечно, верно только для таких привязок, которые в первую очередь основаны на TCP / IP. Также обратите внимание, что очевидно, что каждая служба может иметь несколько прослушивателей (или портов прослушивателей), поэтому свойство «ChannelDispatchers» может возвращать несколько прослушивателей.

Вы также можете посмотреть / сбросить значение свойства «State», чтобы убедиться, что соответствующий диспетчер каналов действительно «открыт», т. Е. Прослушивает.

Редактировать: Вы также можете посмотреть , включающий WMI для WCF . Хотя я никогда не смотрел на это, это могло бы также раскрыть и такую ​​информацию.

Если вы не можете изменить код службы или не хотите этого, вам нужно прибегнуть к таким инструментам, как «Process Explorer» или «netstat» (позднее, если вы используете связывание на основе TCP / IP для конечные точки сервиса). Используйте параметр «-b» netstat для отображения PID и имени исполняемого файла для каждого порта. Это даст вам подсказку к вашему сервису (исполняемому файлу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...