Como obter um serviço para escutar na porta 80 no Windows Server 2003

3

Codifiquei um serviço personalizado do Windows que escuta na porta TCP 80, mas quando tento instalá-lo em uma máquina com Windows Server 2003 ele falha ao ser iniciado porque algum outro serviço já está escutando nessa porta. Até agora, desativei o serviço de administração do IIS e o serviço HTTP SSL, mas não tive sorte.

Quando eu executo netstat -a -n -o | findstr 0.0:80 , ele é o culpado pelo ID do processo 4, mas quando olho para os processos em execução que processam os pontos de ID para o processo "Sistema".

O que posso fazer para que o processo do sistema pare de escutar na porta 80 e faça com que meu serviço seja escutado?

P.S. Gostaria de salientar que o serviço funciona bem se eu instalá-lo em minhas caixas de desenvolvimento do Windows XP ou Windows 7. Além disso, devo especificar que isso não tem nada a ver com ser um serviço. Eu tentei iniciar um aplicativo regular que tenta vincular a porta 80 no Windows Server 2003 com o mesmo resultado - ele falha porque outro aplicativo já está vinculado a essa porta.

    
por Miky Dinescu 13.05.2010 / 03:11

2 respostas

2

Graças a um pouco mais de pesquisa, consegui encontrar uma solução para esse problema. Consegui encontrar a solução em parte devido às informações fornecidas por resposta @ codeka .

Para resumir, como o Windows Server 2003 introduziu um driver de modo kernel ( http.sys ) para tratar de solicitações HTTP, tive que baixar um utilitário chamado HttpCfg.exe que vem nas Ferramentas de Suporte do Windows XP e usa-o para instruir http.sys a parar de escutar solicitações HTTP na porta 80.

O comando para fazer isso foi:

httpcfg.exe delete iplisten -i 0.0.0.0:80

Depois de executar esse comando, usei a ação query para verificar se o endereço foi realmente removido

httpcfg.exe query iplisten

E, finalmente, tive que reinicializar a máquina para que as alterações entrassem em vigor. Depois disso, consegui criar sockets TCP e ligar à porta 80.

Como nota lateral, nenhum dos outros métodos funcionou (por exemplo, desabilitar o serviço de administração do IIS ou o serviço de publicação na World Wide Web ou o serviço HTTP SSL)

OBSERVAÇÃO

Naturalmente, a resposta refere-se estritamente a como transformar o mecanismo interno disponível no Windows para processar solicitações HTTP através do kernel. Deve-se notar, no entanto, que o kernel parece fornecer uma maneira mais eficiente de processar solicitações HTTP do que pode ser alcançado no modo de usuário. Existem APIs disponíveis para aproveitar o processamento HTTP de requisições HTTP.sys (modo kernel) e eu recomendo explorá-las se for uma opção (ou seja, a menos que você esteja apenas tentando executar um serviço que já tenha sido construído)

    
por 13.05.2010 / 18:26
2

Você deseja interromper o "Serviço de Publicação na World Wide Web".

A propósito, a razão pela qual a porta é realmente aberta pelo processo 'System' é porque o Windows Server 2003 moveu partes do IIS para o kernel (especificamente no driver http.sys). Isso é para que coisas como arquivos estáticos possam ser servidos completamente a partir do kernel (onde a pilha TCP / IP e os drivers do sistema de arquivos são executados) sem um comutador de modo de usuário e fornece melhor desempenho.

    
por 13.05.2010 / 03:15