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


179

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

那将是通过控制台为我提供电话号码的服务。但是调试给了我一个例外:(而不是number :))

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

您曾经遇到过同样的情况吗?我将很高兴看到每一个建议。


我很困惑。该HTML转义的文本是否应该作为代码的一部分?
艾米(Amy)2012年

1
看看这里的其他选项[ stackoverflow.com/questions/885744/...
shankbond

Answers:


231

不幸的是,异常文本中的链接http://go.microsoft.com/fwlink/?LinkId=70353断开。但是,它通常导致http://msdn.microsoft.com/zh-cn/library/ms733768.aspx,其中介绍了如何设置权限。

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

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

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

例如: netsh http add ?

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


3
该方法对于在自动化测试服务器上设置所需的权限也很有用。
Technobabble

8
确保从管理员命令提示符下运行命令。
mbonness

3
如果您不在域中,只需COMPUTER_NAME\USER_NAME在上面的命令中使用即可。
dotNET

netsh http add urlacl url=http://+:80/ user=DOMAIN\user如果要授予帐户对端口上任何名称空间的访问权限,则可以运行此命令。
Hamid Heydarian

应该在客户端计算机还是服务器上同时使用这两者?在http://中应该使用什么?客户端或服务器的IP?像往常一样,帮助是无用的
GuidoG '17

177

我关闭了Visual Studio IDE,然后通过右键单击Visual Studio图标并说“以管理员身份运行”将其重新打开,然后在运行主机时,它起作用了!!!


17
首先,这是一个不好的做法,尽管Visual Studio在这里没有什么选择。其次,问题仍然存在于其他步骤(例如部署)。见布赖恩的答案或blogs.msdn.com/b/paulwh/archive/2007/05/04/...
斯特凡纳·古里科

3
好伤心!Friggin MS,使不同的功能自成一体。“最低特权”就这么多。
Dan Csharpster 2013年

1
是否有最佳实践,这是针对MS的。为什么WCF / .NET如此特别,以至于需要另外一圈来跳过去?如果我用Windows上运行的Java编写服务,请使其在本地运行。如果我想要把它公开,我调整防火墙,交换机,路由器等
王锴

1
-1。这不是正确的事情。您应该向受限制的用户授予显式权限并使用它。@Bryan下面的答案更好。
丹尼尔·詹姆斯·布莱斯

2
-1。有问题并表示已解决问题时,此操作与重新格式化硬盘驱动器相同。正如所指出的,答案是运行netssh
Stan Bashtavenko

19

右键单击Visual Studio>以管理员身份运行>打开项目并运行该服务。这是与特权有关的问题。


为我工作。谢谢!
Losbear

14

如果您的计算机在局域网中,则需要对帐户具有某些管理员特权,然后对用户应用某些管理员特权,否则您应该以管理员身份开始...


2
这是我需要为WCF Windows服务执行的操作。我使用一个新的域帐户在构建计算机上运行该服务。我的服务将启动,然后引发该异常。一旦我授予它管理员权限,它就可以完美运行。
thehelix 2014年

这为我解决了。只需右键单击该服务,然后在“登录”选项卡中选择“本地系统帐户”
Alexander Derck,2015年

11

您需要做的简单的事情是关闭Visual Studio环境,然后使用“以管理员身份运行”再次将其打开。现在应该可以成功运行了。


18
以admin身份运行只能避免问题,不能解决问题。
ProfK 2014年

6

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

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

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


您正在考虑的工具称为Http命名空间管理器。它不受MS支持,但可在此处获得:blogs.msdn.com/b/paulwh/archive/2007/05/04/…–
Gareth

1

您的示例代码将无法正常显示,因为您忘记Console.ReadLine()在该serviceHost.Close()行之前添加。这意味着主机是打开的,然后立即关闭。

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


我已经解决了这个问题,这不是因为我的cmd帐户,(当然)也不是因为ReadLine()的原因-原因在于异常(不是cmd结果)。
valecoder 2012年


1

尽管我可以在一台计算机上按照其他用户的解决方案解决此问题,但是该命令netsh并不能解决我一台计算机上的问题,即使当前用户具有管理员权限,我仍然得到“ HTTP无法注册URL”的信息。 ....您的进程没有对此名称空间的访问权限”。因此,我共享我的解决方案,以防您仍然无法将其与其他解决方案一起使用。

在尝试向我的网站的物理目录中的用户授予写权限并且没有成功之后,我最终决定尝试更改IIS设置

如下图所示,我将网站的物理路径凭据配置为以特定用户身份连接,该用户是具有DOMAIN \用户名和密码的管理员帐户,这足以使错误消失。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


-1

关闭iis express和所有浏览器(如果在任何浏览器中打开了URL)。还要在管理员模式下打开Visual Studio IDE。这已经解决了我的问题。


它没有解决问题。在管理员模式下使用IDE是另一个问题,而且可能更严重。
Preza8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.