publicar c# asp.net wcf wcf-binding self-hosting

c# - publicar - System.ServiceModel.AddressAccessDeniedException: HTTP no pudo registrar la URL http:: 8080



wcf iis windows 10 (4)

He creado mi primer servicio WCF auto-alojado. Lo alojé en una aplicación de consola C # pero arroja un error:

System.ServiceModel.AddressAccessDeniedException: HTTP no pudo registrar la URL http: 8080

Cuando ejecuto Visual Studio 2013 como administrador, funciona bien, pero no si no lo hago. Entonces, ¿alguna forma de hacerlo automáticamente en lugar de iniciar VS como ADMIN?

Hasta ahora he creado una biblioteca de clases HelloService en la que agregué un servicio WCF que consta de una interfaz IHelloService y HelloService .

IHelloService :

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

HelloService :

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

Luego creé una aplicación de consola C # HelloServiceHost que tiene un archivo app.config :

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors > <behavior name="MexBehaviour"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> <services> <service name="HelloService.HelloService" behaviorConfiguration="MexBehaviour" > <endpoint address="HelloService" binding="basicHttpBinding" contract="HelloService.IHelloService"></endpoint> <endpoint address="HelloService" binding="netTcpBinding" contract="HelloService.IHelloService"></endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> <host> <baseAddresses> <add baseAddress="http://localhost:8080/"/> <add baseAddress="net.tcp://localhost:8081/"/> </baseAddresses> </host> </service> </services> </system.serviceModel> </configuration>

y el archivo 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(); } } } }

Seguí un video tutorial exactamente pero no funciona ¿por qué?

Estoy usando VS 2013, .net 4


En su caso, se necesitan permisos de URL de ruta raíz ( http://+:8080/ ):

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

Mostrar todas las reservas de URL:

netsh http show urlacl | FIND "URL"


Inicie el cmd como administrador e ingrese:

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

esto funciono para mi


Me encontré con el mismo problema en un proyecto diferente.

El problema es que el enlace a un puerto TCP requiere privilegios administrativos. Hay un par de maneras de lidiar con esto.

  1. Mantenga abierto un indicador de comando administrativo. Entonces simplemente puede ejecutar la aplicación de la consola directamente.

  2. (Como usted sugirió) ejecute VS como administrador. Esto es absolutamente necesario solo al depurar tu aplicación.

  3. Cree un archivo de aplicación múltiple, especificando el nivel de nivel de ejecución solicitado = "requireAdministrator". Consulte ¿Cómo puedo forzar mi aplicación .NET para que se ejecute como administrador? para más detalles.


Si se encontró con este error al iniciar el servicio en el Servicio de Windows, puede verificar la cuenta en su instalador de procesos.

[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); } }