单元测试 WCF 服务时,AddressAccessDeniedException“您的进程没有访问此命名空间的权限”
Posted
技术标签:
【中文标题】单元测试 WCF 服务时,AddressAccessDeniedException“您的进程没有访问此命名空间的权限”【英文标题】:AddressAccessDeniedException "Your process does not have access rights to this namespace" when Unit testing WCF service 【发布时间】:2013-01-11 21:09:09 【问题描述】:我正在测试我的 WCF 服务,但我需要伪造该行为,因为我的服务是使用自定义工厂引导的。 这是我为测试编写的代码:
var channelFactory = new ChannelFactory<IDomainWriteService>(
new CustomBinding(
new BinaryMessageEncodingBindingElement(),
new HttpTransportBindingElement()),
new EndpointAddress(new Uri("local")));
var service = channelFactory.CreateChannel();
我有一个测试初始化,它正在创建一个新的 ServiceHost:
internal static void StartService()
Instance = new ServiceHost(typeof (DomainWriteService));
Instance.Open();
我通过以下方式在我的 MsTest 项目中配置了一个假端点:
<service name="xxx.DomainWriteService">
<endpoint binding="basicHttpBinding" bindingConfiguration=""
name="local" bindingName="http" contract="xxx.IDomainWriteService" />
<host>
<baseAddresses>
<add baseAddress="http://xxx/service" />
</baseAddresses>
</host>
</service>
但是当我运行我的测试时,我得到了这个运行时错误:
Class Initialization method xxx.ClassInitialize threw exception. System.ServiceModel.AddressAccessDeniedException:
System.ServiceModel.AddressAccessDeniedException:
HTTP could not register URL **http://+:80/service/**.
Your process does not have access rights to this namespace
(see http://go.microsoft.com/fwlink/?LinkId=70353 for details). --->
System.Net.HttpListenerException: Access is denied.
我在 Windows 8 上
【问题讨论】:
是的,它对我有用。 【参考方案1】:您需要使用netsh add urlacl
来允许侦听进程的访问,以便能够在端口 80 上接收,(或与其他侦听器共享端口 80)
netsh http add urlacl url=http://+:80/service user=YOURUSER
其中YOURUSER
是运行侦听器的进程的凭据,例如DOMAIN\User
。
另请参阅:WCF ServiceHost access rights
【讨论】:
注意尾随斜杠在注册时很重要,否则你会得到一个错误 87: netsh http add urlacl url=http://+:12345/ user=domain\username 注意 /在 12345 的末尾!以上是关于单元测试 WCF 服务时,AddressAccessDeniedException“您的进程没有访问此命名空间的权限”的主要内容,如果未能解决你的问题,请参考以下文章