O HTTP não pôde registrar a URL http: // +: 8000 / HelloWCF /. Seu processo não possui direitos de acesso a este espaço para nome

179

Sou iniciante no WCF, mas estou tentando melhorar minha experiência. E no primeiro passo eu enfrentei o problema. Eu criei o serviço WCF mais simples. A listagem do código: (todo o código em um arquivo)

using System;
using System.ServiceModel;

namespace EssentialWCF
{
    [ServiceContract]
    public interface IStockService
    {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService
    {
        public double GetPrice(string ticker)
        {
            return 94.85;
        }
    }

    class Service
    {
        static void Main(string[] args)
        {
            ServiceHost serviceHost = new ServiceHost(typeof(StockService),
                                                        new Uri("http://localhost:8000/HelloWCF"));

            serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding());
            serviceHost.Open();

            Console.WriteLine("To continue press ENTER");

            serviceHost.Close();
        }
    }
}

Esse seria o serviço que me forneceria um número via console. Mas depurar me dê a exceção: (em vez de número :))

O HTTP não pôde registrar a URL http: // +: 8000 / HelloWCF / . Seu processo não possui direitos de acesso a este espaço para nome (consulte http://go.microsoft.com/fwlink/?LinkId=70353 para obter detalhes).

Você já enfrentou a mesma situação? Ficarei feliz em ver todos os conselhos.

valecoder
fonte
Estou confuso. Esse texto com escape de HTML deveria fazer parte do código?
Amy
1
procure aqui por outra opção [ stackoverflow.com/questions/885744/…
shankbond

Respostas:

231

Infelizmente, o link no texto da exceção, http://go.microsoft.com/fwlink/?LinkId=70353 , está quebrado. No entanto, costumava levar a http://msdn.microsoft.com/en-us/library/ms733768.aspx, que explica como definir as permissões.

Basicamente, você deve usar o seguinte comando:

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

Você pode obter mais ajuda sobre os detalhes usando a ajuda de netsh

Por exemplo: netsh http add ?

Dá ajuda no http addcomando.

Bryan
fonte
3
Esse método também é útil para configurar as permissões necessárias em um servidor de teste automatizado.
Technobabble
8
Certifique-se de executar o comando em um prompt de comando do administrador.
Mbonness
3
Se você não estiver em um domínio, basta usar COMPUTER_NAME\USER_NAMEo comando acima.
dotNET
você pode executar isso netsh http add urlacl url=http://+:80/ user=DOMAIN\userse desejar conceder à conta direitos de acesso a quaisquer espaços para nome na porta.
precisa saber é o seguinte
isso deve ser feito na máquina cliente ou no servidor ou em ambos? e o que deve ser usado em http: //? o ip do cliente ou do servidor? Como de costume, a ajuda é inútil
GuidoG
177

Fechei o IDE do Visual studio e o reabri clicando com o botão direito do mouse no ícone do Visual Studio e dizendo "Executar como Administrador". Então, quando executei o host, funcionou !!!

John Royceton Arthur
fonte
17
Primeiro, isso é uma prática ruim, embora o Visual Studio deixe pouca escolha aqui. Segundo, o problema permanece em outras etapas (por exemplo, implantadas). Veja a resposta de Bryan ou blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon
3
Minha nossa! Friggin MS, criando funcionalidades diferentes que se combatem. Tanta coisa para 'menos privilégio'.
Dan Csharpster
1
Prática recomendada ou não, isso é em MS. Por que o WCF / .NET é tão especial que precisa de mais um aro para passar? Se eu escrever um serviço em Java executando no Windows, ele funcionará localmente. Se eu quiser torná-la pública, eu ajustar firewall, switcher, roteador etc.
Kai Wang
1
-1. Esta não é a coisa correta a fazer. Você deve conceder permissão explícita a um usuário restrito e usá-lo. @ A resposta de Bryan abaixo é melhor.
Daniel James Bryars
2
-1. É o mesmo que reformatar o disco rígido quando houver um problema e dizer que o problema foi resolvido. A resposta é, como foi salientado, para executar netssh
Stan Bashtavenko
19

Clique com o botão direito do mouse em Visual Studio> Executar como Administrador> Abra seu projeto e execute o serviço. Este é um problema relacionado a privilégios.

user3264537
fonte
Trabalhou para mim. Obrigado!
Losbear
14

Você precisa de algum privilégio de administrador na sua conta, se a sua máquina na rede local aplicar algum privilégio de administrador ao seu usuário, caso contrário, você deve iniciar o ide como administrador ...

Pramod Lawate
fonte
2
Era isso que eu precisava fazer para o meu serviço de janelas do WCF. Eu estava usando uma nova conta de domínio para executar o serviço em uma máquina de compilação. Meu serviço seria iniciado e lançaria essa exceção. Depois de conceder direitos de administrador, funcionou perfeitamente.
thehelix
Isso resolveu para mim. Basta clicar direito do mouse no serviço e na guia "logon" escolha "conta Sistema Local"
Alexander Derck
11

A coisa simples que você precisa fazer é fechar o ambiente do Visual Studio e abri-lo novamente usando 'Executar como administrador'. Agora deve ser executado com sucesso.

Mahesh.P
fonte
18
A execução como administrador evita apenas problemas, não os resolve.
ProfK
6

No Windows Vista e versões posteriores, o serviço HTTP WCF causaria a exceção mencionada porque uma conta restrita não tem o direito. Essa é a razão pela qual funcionou quando você o executou como administrador.

Todo desenvolvedor sensato deve usar uma conta RESTRITA e não como administrador, mas muitas pessoas seguem o caminho errado e é exatamente por isso que existem tantos aplicativos por aí que EXIGEM permissões de administrador quando não são realmente necessários. Trabalhar da maneira preguiçosa resulta em soluções preguiçosas. Espero que você ainda trabalhe em uma conta restrita (meus parabéns).

Existe uma ferramenta lá fora (a partir de 2008) chamada NamespaceManagerTool, se bem me lembro, que deveria conceder permissões de usuário restritas nesses URLs de serviço que você define para o WCF. Eu ainda não usei isso ...

Senhor dos Scripts
fonte
A ferramenta em que você está pensando se chama Gerenciador de namespace HTTP. Não é suportado pelo MS, mas está disponível aqui: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth
1

Seu código de exemplo não funcionará como mostrado, porque você esqueceu de incluir um Console.ReadLine()antes da serviceHost.Close()linha. Isso significa que o host é aberto e imediatamente fechado.

Fora isso, parece que você tem um problema de permissão na sua máquina. Verifique se você está conectado como uma conta de administrador em sua máquina. Se você é um administrador, pode ser que você não tenha o Serviço de Publicação na World Wide Web (W3SVC) em execução para lidar com solicitações HTTP.

Sixto Saez
fonte
Eu já corrigi esse problema e isso não é por causa da minha conta do cmd e (é claro) não por causa do ReadLine () - porque o ponto está na exceção (não no resultado do cmd).
valecoder
Resolvi isso com stackoverflow.com/questions/885744/… .
valecoder
1

Embora eu tenha conseguido resolver esse problema em um computador, seguindo as soluções de outros usuários, o comando netshnão resolveu o problema em uma de minhas máquinas e, embora o usuário atual tivesse direitos de administrador, eu ainda estava recebendo o "HTTP não pôde registrar o URL .... Seu processo não possui direitos de acesso a este espaço para nome ". Então, estou compartilhando minha solução, caso você ainda não consiga trabalhar com as outras soluções também.

Depois de tentar conceder permissões de gravação ao usuário no diretório físico do meu site e não ter sucesso, finalmente decidi tentar alterar as configurações do IIS .

Como as imagens abaixo mostram, configurei as credenciais do caminho físico do meu site para conectar-se como um usuário específico, que era uma conta de administrador com DOMÍNIO \ nome de usuário e senha, e isso foi suficiente para que o erro desaparecesse.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Ulysses Alves
fonte
-1

Feche o iis express e todos os navegadores (se o URL tiver sido aberto em qualquer navegador). Abra também o IDE do visual studio no modo de administrador. Isso resolveu meu problema.

Lokesh
fonte
Não resolveu o problema. O uso de um IDE no modo Administrador é outro problema e provavelmente mais sério.
Preza8 15/05/19