HTTP无法注册URL http:// +:8000/HelloWCF /.您的进程没有此命名空间的访问权限

val*_*der 176 wcf

我是WCF的初学者,但试图改善我的经验.在第一步,我遇到了问题.我创建了最简单的WCF服务.代码清单:(所有代码都在一个文件中)

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那将是通过控制台给我一个号码的服务.但调试给我例外:(而不是数字:))

HTTP无法注册URL http:// +:8000/HelloWCF /.您的进程没有此命名空间的访问权限(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353).

你有没有遇到过同样的情况?我很乐意看到每一条建议.

小智 224

遗憾的是,例外文本http://go.microsoft.com/fwlink/?LinkId=70353中的链接已损坏.但是,它曾经导致http://msdn.microsoft.com/en-us/library/ms733768.aspx,它解释了如何设置权限.

它基本上会通知您使用以下命令:

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

您可以使用帮助获得有关详细信息的更多帮助 netsh

例如: netsh http add ?

提供有关http add命令的帮助.

  • 确保从管理员命令提示符运行该命令. (7认同)
  • 此方法对于在自动测试服务器上设置所需权限也很有用. (3认同)
  • 如果您不在域中,请在上面的命令中使用"COMPUTER_NAME\USER_NAME". (3认同)
  • 如果您想授予帐户对端口上任何命名空间的访问权限,您可以运行“netsh http add urlacl url=http://+:80/ user=DOMAIN\user”。 (2认同)

Joh*_*hur 178

我关闭Visual Studio IDE并通过右键单击Visual Studio图标并说"以管理员身份运行"重新打开它,然后当我运行主机时,它工作了!!!

  • 首先,虽然Visual Studio在这里几乎没有选择,但这是不好的做法.其次,问题仍然存在于其他步骤(例如部署).请参阅Bryan的答案或http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx (17认同)
  • 好悲伤!Friggin MS,制作不同的功能,自我战斗.对于"最小特权"来说太多了. (3认同)
  • -1.当有问题并说问题解决时,它与重新格式化硬盘驱动器相同.正如所指出的那样,答案是运行netssh (2认同)

小智 17

右键单击Visual Studio>以管理员身份运行>打开项目并运行该服务.这是一个与权限相关的问题.


小智 13

如果您的计算机位于局域网中,那么您需要一些管理员权限,然后您将一些管理员权限应用于您的用户,您应该以管理员身份启动ide ...

  • 这是我需要为我的WCF Windows服务做的事情.我使用新的域帐户在构建计算机上运行该服务.我的服务将启动,然后抛出该异常.一旦我赋予它管理员权限,它就完美无缺. (2认同)

Ram*_*yev 11

您必须授予您的应用程序侦听 http 请求的权限。您可以在cmd中使用此命令来达到此目的(打开cmd以管理员身份运行模式

netsh http add urlacl url=http://+:8000/ user=Everyone
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序正在使用其他端口,例如 9095,则此命令必须如下所示:

netsh http add urlacl url=http://+:9095/ user=Everyone
Run Code Online (Sandbox Code Playgroud)

并重新运行您的应用程序,它应该可以工作。这种方式为我工作。


小智 10

您需要做的简单事情是关闭Visual Studio环境并使用"以管理员身份运行"再次打开它.它现在应该成功运行.

  • 仅以管理员身份运行可以避免出现问题,但无法解决问题. (17认同)

Lor*_*pts 5

在Windows Vista和更高版本中,HTTP WCF服务会引起您提到的异常,因为受限帐户无权执行此操作。这就是当您以管理员身份运行它时起作用的原因。

每个明智的开发人员都必须使用RESTRICTED帐户而不是管理员身份,但是很多人走错了路,这就是为什么如此之多的应用程序没有真正需要它们时需要DEMAND管理员权限的原因。以惰性方式工作会产生惰性解决方案。希望您仍然在受限帐户中工作(对我表示祝贺)。

如果我没有记错的话,那里有一个名为NamespaceManagerTool的工具(大约从2008年开始),应该为您为WCF定义的这些服务URL授予受限用户权限。我没有用过...


Six*_*aez 1

您的示例代码将无法按所示方式工作,因为您忘记Console.ReadLine()在行前添加 a serviceHost.Close()。这意味着主机打开然后立即关闭。

除此之外,您的计算机似乎存在权限问题。确保您以管理员帐户登录计算机。如果您是管理员,则可能没有运行万维网发布服务 (W3SVC) 来处理 HTTP 请求。