System.ServiceModel.AddressAccessDeniedException: HTTP non ha potuto registrare l’URL http :: 8080

Ho creato il mio primo servizio WCF self-hosted. L’ho ospitato in un’app console C # ma genera un errore:

System.ServiceModel.AddressAccessDeniedException: HTTP non ha potuto registrare l’URL http: 8080

Quando eseguo Visual Studio 2013 come amministratore, quindi funziona bene, ma non se non lo faccio. Quindi un modo per farlo funzionare automaticamente invece di avviare VS come amministratore?

Finora ho creato una libreria di classi HelloService in cui ho aggiunto un servizio WCF che consiste in un’interfaccia IHelloService e HelloService .

IHelloService :

 namespace HelloService { [ServiceContract] public interface IHelloService { [OperationContract] String GetMsg(); } } 

HelloService :

 namespace HelloService { public class HelloService : IHelloService { public String GetMsg() { return "Service Accessed"; } } } 

Poi ho creato un’app console C # HelloServiceHost che ha un file app.config :

                          

e il file program.cs:

 using HelloService; using System.ServiceModel; namespace HelloServiceHost { class Program { static void Main(string[] args) { using(ServiceHost sh = new ServiceHost(typeof(HelloService.HelloService))) { sh.Open(); Console.WriteLine("Host Started @"+ System.DateTime.UtcNow.ToShortDateString()); sh.Close(); } } } } 

Ho seguito esattamente un video tutorial ma non funziona perché?

Sto usando VS 2013, .net 4

Avviare il cmd come amministratore ed inserire:

netsh http aggiungere urlacl url = http: // +: 8080 / utente MyUri = DOMINIO \ utente

questo ha funzionato per me.

Ho incontrato lo stesso problema su un altro progetto.

Il problema è che l’associazione a una porta TCP richiede privilegi amministrativi. Ci sono un paio di modi per affrontare questo.

  1. Tieni aperto un prompt dei comandi amministrativo. Quindi è ansible eseguire direttamente l’app della console.

  2. (Come hai suggerito) esegui VS come amministratore. Questo è assolutamente necessario solo durante il debug della tua app.

  3. Creare un file manifiest dell’applicazione, specificando requestExecutionLevel level = “requireAdministrator”. Vedi Come impone l’esecuzione della mia applicazione .NET come amministratore? per ulteriori dettagli.

Le autorizzazioni URL del percorso principale ( http: // +: 8080 / ) sono necessarie nel tuo caso:

 netsh http add urlacl url=http://+:8080/ user=%USERDOMAIN%\%USERNAME% 

mostra tutte le prenotazioni URL:

 netsh http show urlacl | FIND "URL" 

Se si è verificato questo errore durante l’avvio del servizio su Windows Service, è ansible controllare l’account sul programma di installazione del processo.

 [RunInstaller(true)] public class ProjectInstaller : Installer { private ServiceProcessInstaller process; private ServiceInstaller service; public ProjectInstaller() { process = new ServiceProcessInstaller(); process.Account = ServiceAccount.LocalSystem; service = new ServiceInstaller(); service.ServiceName = "WCFWindowsServiceSample"; Installers.Add(process); Installers.Add(service); } }