Quando você está desenvolvendo um serviço WCF, e o usuário que utiliza para rodar a aplicação de hosting não tem privilégios administrativos, provavelmente você irá se deparar com a seguinte mensagem de erro:
AddressAccessDeniedException: HTTP could not register URL http://+:8080/Servico. Your process does not have access rights to this namespace.
Ao rodar a aplicação que efetuará o hosting do serviço, o WCF recorre ao HTTP.sys (componente para comunicação HTTP sem uso do IIS) para criar a URL onde o serviço será exposto. Depois da URL criada, essas requisições serão encaminhadas para o respectivo serviço que efetuou o registro. No entanto, para efetuar o registro, você precisa de privilégios administrativos que, eventualmente, você não tenha.
Para resolver esse problema você pode rodar como “Administrador” (mas você já sabe a implicação disso), ou recorrer a uma ferramenta de linha de comando chamada netsh.exe. Dado a URL e o usuário, ele permite o acesso à URL à este usuário, através de ACLs. Abaixo o código que você deve executar (como “Administrador”) para conceder o acesso:
netsh http add urlacl url=http://+:80/Servico user=IANB01IsraelAece
Sim ele sobe direitinho, consumo o serviço e etc.
Mas quando vou atualizar o serviço que já esta no ar ele fecha o host e faz o unload do appdomain ai quando vai abrir o host para a nova verssão ele da erro dizendo que a url já existe no HTTP.SYS.
Bem que o Galuppo disse que voce é um cara gente boa 🙂
Muito obrigado pela ajuda
Israel, eu preciso fazer ao contrario, estou tendo o seguinte erro :
O HTTP não pôde registrar a URL http://+:8111/AutenticacaoSvc/. Outro aplicativo já registrou essa URL com HTTP.SYS.
Estou rodando um host em console applicatiom com System.Monitor, o serviço já esta de pé quando copio uma nova verssão da DLL ele remove do host e tenta criar novamente a hora que vai startar o host ocorre o erro acima.
Como faço para remover a url do HTTP.SYS ?
desde já agradeço
Israel,
Tenho um host (console application) ele fica monitorando as dll (serviço) se são apagadas ou alteradas usando FileSystemWatcher.
Quando eu altero uma dll(seriço) eu primeiramente eu removo AppDomain.Unload(appDomains[assemblyFile]); e depois eu crio AppDomain appDomain = RemoteProxy.Start(assemblyFile);
Adiciono os endpoint
foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(" {0}", endpoint.Address);
endpoint.Behaviors.Add(new MonitorBehavior());
}
e na hora de host.Open(); ele ocorre aquela exception dizendo que a url já existe no http.sys
Este exemplo eu baixei do
http://www.codeproject.com/KB/WCF/generic_wcf_host.aspx
Obrigado pela ajuda
Boas Henrique,
Dei uma olhada superficial no artigo, e pude perceber que ele cria um AppDomain.
Sendo assim, certifique-se que ao detectar a mudança, o host está mesmo sendo encerrado. Tente analisar a stack trace, e com ela, tentar encontrar os passos que estão sendo realizados durante o load/unload dos assemblies.
Sim o host esta sendo encerrado quando ele detecta uma mudança, ai quando vai dar um open no host ele dis que a url já esta registrada no http.sys.
Tem como remover essa url do HTTP.SYS ?
Boas Henrique,
Me mande o projeto via e-mail para dar uma olhada (mas em *.zip).
Voce recebeu o arquivo ?
Boas,
Sim, e já respondi.
Israel, estou tendo o mesmo problema, você pode dizer qual foi a solução dada ao problema do Henrique Bronze?
Att,
Bruno
Boas Bruno,
Tentou utilizar a alternativa mencionada no post?