Я закодировал настраиваемую службу 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 и драйверы файловой системы) без переключателя пользовательского режима, что обеспечивает лучшую производительность.