Назад | Перейти на главную страницу

Как заставить службу прослушивать порт 80 в Windows Server 2003

Я закодировал настраиваемую службу Windows, которая прослушивает TCP-порт 80, но когда я пытаюсь установить ее на машине с Windows Server 2003, она не запускается, потому что какая-то другая служба уже прослушивает этот порт. Пока что я отключил службу IIS Admin и службу HTTP SSL, но безуспешно.

Когда я бегу netstat -a -n -o | findstr 0.0:80 он дает мне идентификатор процесса 4 как виновника, но когда я смотрю на запущенные процессы, этот идентификатор процесса указывает на процесс «Система».

Что я могу сделать, чтобы системный процесс прекратил прослушивание порта 80 и вместо этого заставил мою службу прослушивать?

P.S. Я должен отметить, что служба работает нормально, если я устанавливаю ее на свои разработки под Windows XP или Windows 7. Также я должен указать, что это не имеет ничего общего с тем, что это служба. Я попытался запустить обычное приложение, которое пытается привязаться к порту 80 на Windows Server 2003 с тем же результатом - это не удается, потому что другое приложение уже привязано к этому порту.

Благодаря дополнительным поискам я смог найти решение этой проблемы. Мне удалось найти решение отчасти благодаря информации, предоставленной @codekaответ.

Подводя итог, поскольку Windows Server 2003 представила драйвер режима ядра (http.sys) для обработки HTTP-запросов мне пришлось скачать утилиту под названием HttpCfg.exe который входит в состав средств поддержки Windows XP, и с его помощью http.sys чтобы прекратить прослушивание HTTP-запросов на порту 80.

Команда для этого была:

httpcfg.exe delete iplisten -i 0.0.0.0:80

После выполнения этой команды я использовал query действие, чтобы убедиться, что адрес действительно был удален

httpcfg.exe query iplisten

И, наконец, мне пришлось перезагрузить компьютер, чтобы изменения вступили в силу. После этого я смог создать сокеты TCP и привязаться к порту 80.

В качестве побочного примечания, ни один из других методов не сработал (например, отключение службы администратора IIS, службы публикации в Интернете или службы HTTP SSL)

НОТА

Конечно, ответ строго относится к тому, как включить встроенный в Windows механизм обработки HTTP-запросов через ядро. Однако следует отметить, что ядро, по-видимому, обеспечивает более эффективный способ обработки HTTP-запросов, чем это может быть достигнуто в пользовательском режиме. Существуют API-интерфейсы, доступные для использования HTTP-обработки запросов http.sys (режим ядра), и я рекомендую изучить их, если это вариант (т.е. если вы просто не пытаетесь запустить уже созданную службу)

Вы хотите остановить «Службу публикации в Интернете».

Между прочим, причина, по которой порт фактически открывается процессом «Система», заключается в том, что Windows Server 2003 переместила части IIS в ядро ​​(в частности, в драйвер http.sys). Это сделано для того, чтобы такие вещи, как статические файлы, можно было полностью обслуживать из ядра (где запущены стек TCP / IP и драйверы файловой системы) без переключателя пользовательского режима, что обеспечивает лучшую производительность.