我是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();
}
}
}
那将是通过控制台给我一个号码的服务。但调试给了我例外:(而不是数字:))
HTTP无法注册网址http://+:8000/HelloWCF/。您的进程没有此命名空间的访问权限(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353。)
你遇到过同样的情况吗?我很乐意看到每一条建议。
答案 0 :(得分:214)
不幸的是,异常文本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
命令的帮助。
答案 1 :(得分:177)
我关闭Visual Studio IDE并右键单击Visual Studio图标并说“以管理员身份运行”重新打开它,然后当我运行主机时,它工作了!!!
答案 2 :(得分:14)
右键单击Visual Studio>以管理员身份运行>打开您的项目并运行该服务。 这是一个与权限相关的问题。
答案 3 :(得分:13)
如果您的计算机位于局域网中,那么您需要一些管理员权限,然后您将一些管理员权限应用于您的用户,您应该以管理员身份启动ide ...
答案 4 :(得分:10)
您需要做的简单事情是关闭Visual Studio环境并使用'以管理员身份运行再次打开它。它现在应该成功运行。
答案 5 :(得分:5)
在Windows Vista及更高版本中,HTTP WCF服务内容会导致您提到的异常,因为受限制的帐户没有权利。这就是为什么当你以管理员身份运行它时它起作用的原因。
每个合理的开发人员都必须使用RESTRICTED帐户而不是管理员,但很多人都采用了错误的方式,而这正是为什么有很多应用程序需要DEMAND管理员权限的时候才真正需要它们。懒惰的方式导致懒惰的解决方案。我希望你仍然在受限制的帐户工作(我的祝贺)。
有一个名为NamespaceManagerTool的工具(从2008年左右开始),如果我没记错的话,应该授予您为WCF定义的这些服务URL的受限用户权限。我没有用过那个......
答案 6 :(得分:1)
您的示例代码无法正常显示,因为您忘记在Console.ReadLine()
行之前添加serviceHost.Close()
。这意味着主机已打开,然后立即关闭。
除此之外,您的计算机上似乎存在权限问题。确保您已在计算机上以管理员帐户登录。如果您是管理员,则可能是您没有运行万维网发布服务(W3SVC)来处理HTTP请求。
答案 7 :(得分:1)
虽然我能够在一台计算机上按照其他用户解决方案解决此问题,但命令netsh
并未解决我的某台计算机中的问题,即使当前用户具有管理员权限,我仍然获取“HTTP无法注册URL ....您的进程没有访问此命名空间的权限”。所以我分享我的解决方案,以防您仍然无法使用它其他解决方案也是如此。
在尝试向我网站的物理目录中的用户提供写入权限并且没有成功之后,我最终决定尝试更改IIS设置。
如下图所示,我将我网站的物理路径凭据配置为以特定用户身份进行连接,该用户是使用DOMAIN \用户名和密码的管理员帐户,这足以使错误消失了。
答案 8 :(得分:1)
您必须授予应用程序侦听 http 请求的权限。为此,您可以在 cmd 中使用此命令(打开 cmd 以管理员身份运行)
netsh http add urlacl url=http://+:8000/ user=Everyone
如果您的应用正在使用其他端口,例如 9095,则此命令必须如下所示:
netsh http add urlacl url=http://+:9095/ user=Everyone
然后重新运行您的应用,它应该可以工作了。 这种方式对我有用。
答案 9 :(得分:-1)
关闭iis express和所有浏览器(如果在任何浏览器中打开了url)。还可以在管理模式下打开visual studio IDE。这解决了我的问题。