Uma das principais mudanças de segurança implementada à partir do Windows Vista é o Controle de Conta de Usuário (UAC). Com o UAC habilitado, todas as contas de usuário, incluindo contas administrativas, são executadas com direitos de usuário padrão.

Quando um administrador faz logon, o Windows cria dois tokens de acesso separados para o usuário, sendo um token de acesso sem privilégios administrativos (token filtrado) e outro de acesso de administrador (token full). No momento em que um processo precisa ser executado com privilégio elevado, o Windows não utiliza o token filtrado para executar o processo e, sim, o token completo. Se o usuário for administrador, o Windows exibe a tela do UAC apenas para confirmar a troca do token. Caso contrário, o Windows solicita as credenciais de uma conta administrativa.

O resultado é que isso afeta execução de serviços web HTTP, pois escutar um determinado endereço HTTP é uma operação restrita para usuários com privilégios administrativos. Por padrão, cada caminho HTTP é reservado para uso do administrador do sistema. Por exemplo, ao realizar o debug dos serviços no Visual Studio, a exceção AddressAccessDeniedException é gerada no momento em que o serviço é iniciado caso não seja executado através de uma conta elevada.

Mensagem de erro:

HTTP could not register URL http://+:8000/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).

Uma maneira de resolver o problema é executar o Visual Studio elevado. Outra opção é executar o prompt de comando como administrador e executar o comando a seguir para atribuir o namespace HTTP para a conta do usuário:

netsh http add urlacl url=http://+:8000/ user=MYMACHINE\UserName

*MYMACHINE deve ser substituído pelo nome do computador ou pelo domínio e UserName pelo usuário administrador. E a URL digitada deve corresponder a URL da mensagem de erro.

Ao executar o serviço novamente no Visual Studio a exceção não irá mais ocorrer.

Para maiores informações do comando netsh execute o comando “netsh http”.