问题

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/

10-08 23:07
查看更多