问题
System.ServiceModel.Security.SecurityAccessDeniedException : Access is denied.
相关堆栈行(减少)
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
环境
开发人员机器(主机):Windows Vista,Visual Studio 2008,nUnit
测试机(来宾):Windows 2003,IIS,Windows 2003防火墙(已禁用)
虚拟机:Virtual PC
网络:Microsoft回送适配器
描述
Windows 2003承载WCF服务清单,其中的服务都经过了良好的测试。
当应用程序使用者在Windows 2003中运行时-一切正常。
当应用程序使用者从Windows Vista(在此虚拟网络下)运行时-出现安全问题。因此需要调整服务质量并包括证书。遵循文档,但访问仍被拒绝。
目的
无需复杂的安全措施-只需一台笔记本电脑和虚拟机即可。
我尝试复制此官方方案:http://msdn.microsoft.com/en-us/library/ms733938.aspx
我想使用单元测试应用程序(nunit)从Windows Vista OS下的应用程序调用Windows 2003上托管的服务。 Windows 2003上已部署的服务是经过良好测试的服务。
有什么用
使用(或过去的.asmx webservices)的任何服务均可正常运行。
怀疑
我相信必须与该死的Windows Vista一起使用。 Windows 2003事件日志具有成功的审核条目。
服务设置
在Windows Vista上运行的使用者-nunit应用程序:
<system.serviceModel>
<client>
<endpoint address="http://soa.homolog.com/RemoteService/RemoteService.svc"
binding="wsHttpBinding"
behaviorConfiguration="InternetEndpointBehavior"
bindingConfiguration="AnonymousBindingConfiguration"
contract="RemoteService.IRemoteService"
name="WSHttpBinding_IEmpresaService">
<identity>
<dns value="homologCertificate" />
</identity>
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="AnonymousBindingConfiguration">
<security mode="Message">
<message clientCredentialType="None" />
</security>
</binding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="InternetEndpointBehavior">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
该服务托管在IIS / Windows 2003上:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://soa.homolog.com" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<bindings>
<wsHttpBinding>
<binding name="BindingNoSecurity">
<security mode="Message">
<message clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CompanyCoreBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug
includeExceptionDetailInFaults="true" />
<serviceThrottling
maxConcurrentCalls="500"
maxConcurrentInstances="500"
maxConcurrentSessions="500" />
<serviceTimeouts
transactionTimeout="00:10:00" />
<serviceCredentials>
<serviceCertificate
findValue="homologCertificate"
storeLocation="LocalMachine"
x509FindType="FindBySubjectName"
storeName="My"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
最佳答案
这是System.ServiceModel.Security异常,因此它可能不是防火墙或IIS问题。
尝试从客户端删除以下代码:
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
以及来自服务器的以下代码:
<serviceCredentials>
<serviceCertificate
findValue="homologCertificate"
storeLocation="LocalMachine"
x509FindType="FindBySubjectName"
storeName="My"/>
</serviceCredentials>
关于wcf - 当使用者尝试调用虚拟机上托管的WCF服务调用时,WCF的访问被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3760057/