HTTP无法注册URL http:// +:8000 / HelloWCF /。 你的进程没有这个命名空间的访问权限
我是WCF的初学者,但试图改善我的经验。 在第一步我面临这个问题。 我创build了最简单的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(); } } }
这将是通过控制台给我一个号码的服务。 但debugging给我例外:(而不是数字:))
HTTP无法注册URL http:// +:8000 / HelloWCF / 。 您的进程无权访问此名称空间(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353 )。
你有没有遇到过这种情况? 我会很高兴看到每一个build议。
不幸的是,exception文本中的链接( 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
命令提供帮助。
我closuresVisual Studio IDE并重新打开它,通过右键单击Visual Studio图标并说“以pipe理员身份运行”,然后当我运行主机,它的工作!
如果您的机器在局域网中,那么您需要一些pipe理员权限给您的帐户,然后您将一些pipe理员权限应用于您的用户,否则您应该以pipe理员身份启动IDE。
右键单击Visual Studio>以pipe理员身份运行>打开您的项目并运行该服务。 这是一个特权相关的问题。
你需要做的简单的事情是closures你的Visual Studio环境,并使用“以pipe理员身份运行”再次打开它。 它现在应该成功运行。
在Windows Vista和更高版本中,HTTP WCF服务的东西会导致您提到的exception,因为受限制的帐户没有这个权限。 这就是为什么它以pipe理员身份运行时的原因。
每个明智的开发人员都必须使用RESTRICTED帐户而不是pipe理员,但是许多人却走错了方向,这就是为什么有那么多的应用程序需要pipe理员权限,而这些权限并不是真正需要的。 懒惰的工作方式导致懒惰的解决scheme。 我希望你仍然在一个有限的帐户工作(我的祝贺)。
如果我没有记错的话,那里有一个叫做NamespaceManagerTool的工具(从2008年左右开始),它应该为您为WCF定义的这些服务URL授予受限用户的权限。 我没有使用,虽然…
您的示例代码将无法正常显示,因为您忘记在serviceHost.Close()
行之前包含Console.ReadLine()
。 这意味着主机打开,然后立即closures。
除此之外,你的机器似乎有一个权限问题。 确保您以计算机上的pipe理员帐户login。 如果您是pipe理员,则可能是因为没有运行万维网发布服务(W3SVC)来处理HTTP请求。
closuresiis express和所有浏览器(如果在任何浏览器中打开了url)。 也以pipe理员模式打开Visual Studio IDE。 这已经解决了我的问题。