Задача
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 (отключен)
Виртуальная машина: виртуальный ПК
Сеть: Microsoft Loopback Adapter
Описание
Windows 2003 содержит инвентаризацию службы WCF, службы в ней хорошо протестированы.
Когда потребитель приложения работает в Windows2003 - все работает нормально.
Когда потребитель приложения запускается из Windows Vista (в этой виртуальной сети) - возникают проблемы с безопасностью.Поэтому нужно было настроить сервис и включить сертификат.Документация была соблюдена, но в доступе по-прежнему отказано.
Цель
Никаких сложных мер безопасности не требуется - это просто ноутбук и виртуальная машина.Я попытался повторить этот официальный сценарий: http://msdn.microsoft.com/en-us/library/ms733938.aspx
Я хочу звонить службам, размещенным на Windows 2003, из моего приложения под ОС Windows Vista с помощью приложения Unit Test (nunit).Развернутые сервисы на Windows 2003 хорошо протестированы.
ЧТО РАБОТАЕТ
Любой сервис, использующий (или прошлые веб-сервисы .asmx), работает правильно.
Подозрение
Я полагаю, что это должно быть с этой проклятой Windows Vista.В журнале событий Windows 2003 имеются успешные записи аудита.
ПАРАМЕТРЫ ОБСЛУЖИВАНИЯ
Пользовательское приложение, работающее в Windows Vista:
<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>