System.ServiceModel.AddressAccessDeniedException:HTTP无法注册URL http :: 8080

我创建了我的第一个自托管WCF服务。 我在C#控制台应用程序中托管它,但它抛出一个错误:

System.ServiceModel.AddressAccessDeniedException:HTTP无法注册URL http:8080

当我以管理员身份运行Visual Studio 2013时,它运行良好,但如果我不这样做则不行。 那么任何方法来自动完成它而不是作为ADMIN启动VS?

到目前为止,我创建了一个HelloService类库,其中我添加了一个WCF服务,该服务由一个接口IHelloServiceHelloService

IHelloService

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

HelloService

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

然后我创建了一个C#控制台应用程序HelloServiceHost ,它有一个app.config文件:

                          

和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(); } } } } 

我完全按照video教程进行了操作但是为什么不工作呢?

我正在使用VS 2013,.net 4

以管理员身份启动cmd并输入:

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

这对我有用。

我在另一个项目上遇到了同样的问题。

问题是绑定到TCP端口需​​要管理权限。 有几种方法可以解决这个问题。

  1. 保持管理命令提示符处于打开状 然后你可以直接运行控制台应用程序。

  2. (正如你的建议)以管理员身份运行VS. 仅在调试应用程序时,这是绝对必要的。

  3. 创建一个应用程序最明显的文件,指定requestedExecutionLevel level =“requireAdministrator”。 请参阅如何强制我的.NET应用程序以管理员身份运行? 更多细节。

在您的情况下需要根路径URL( http:// +:8080 / )权限:

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

显示所有url预订:

 netsh http show urlacl | FIND "URL" 

如果在Windows服务上启动服务时遇到此错误,则可以检查流程安装程序上的帐户。

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