Открытие брандмауэра для службы Windows

У меня есть приложение службы C #, к которому клиенты xml-rpc должны обращаться извне. Он размещается самостоятельно через HttpListenerRequest; не IIS размещен. (Нельзя требовать, чтобы на серверах был включен IIS)

Он отлично работает с клиентом, когда брандмауэр сервера выключен ИЛИ открыты порты, которые использует приложение. Однако, если я создам исключение брандмауэра, чтобы включить приложение через его имя; его невозможно получить с клиентского компьютера. (Я пробовал как вручную включить службу, так и добавить код для включения приложения из моего установщика.)

Причина, по которой я хочу, чтобы приложение было включено; а не порты, это то, что порты могут измениться. (Мое приложение будет проверять диапазон доступных портов на случай, если порты по умолчанию уже используются). Оглядываясь вокруг, кажется, что для любой службы, которая не является полностью «самодостаточной», нельзя включить брандмауэр.

Кто-нибудь знает обходной путь для этого?


person user457588    schedule 10.02.2011    source источник


Ответы (2)


не уверен в синтаксисе, но я думаю, вам нужно использовать netsh примерно так:

netsh http add urlacl url=http://www.contoso.com:80/MyUri user=DOMAINE\utilisateur listen=yes
person Steve B    schedule 10.02.2011
comment
Это даст программе разрешение зарезервировать порт и начать его прослушивание. У него уже есть служба, полностью работающая и слушающая. Именно брандмауэр блокирует входящие запросы к службе. - person Despertar; 26.03.2012

Попробуйте установить для вашей службы тип SID unrestricted.

Создайте входящую программу или правило обслуживания

Хотя команда также допускает значение NONE, этот параметр означает, что службу нельзя использовать в правиле брандмауэра, как описано здесь. По умолчанию большинство служб в Windows настроены как НЕОГРАНИЧЕННЫЕ. Если вы измените тип SID на RESTRICTED, служба может не запуститься. Мы рекомендуем изменять тип SID только для служб, которые вы хотите использовать в правилах брандмауэра, и менять тип SID на UNRESTRICTED.

На странице написано, что нужно использовать команду

sc sidtype <Type> <ServiceName>

однако для меня сам инструмент sc говорит использовать это:

sc sidtype <ServiceName> <Type>

Возможно, служба также должна работать под учетной записью «Сетевая служба». Я не совсем запустил свою службу. РЕДАКТИРОВАТЬ: Моя проблема возникла из-за WCF, а не из-за этого.

person Andrius R.    schedule 12.10.2018