(я вижу несколько вопросов, связанных с моей проблемой, но ни одно из решений не работает для меня, так как я сталкиваюсь с этой проблемой на производстве, а не во время локальной разработки, и я уже попробовал все предложенные исправления.)
У меня есть приложение Silverlight 4, которое использует службы WCF, размещенные в IIS. В производстве эти услуги доступны через HTTPS. Несмотря на наличие действительного файла crossdomain.xml , я по-прежнему получаю известную «ошибку безопасности» при доступе к службе:
Произошла ошибка при попытке сделать запрос к URI
'https://MYDOMAIN/MYSERVICE.svc'. Это может быть связано с попыткой
получить доступ к услуге междоменным способом без надлежащего междоменного
политика или политика, которая не подходит для сервисов SOAP. Вы
может потребоваться связаться с владельцем сервиса, чтобы опубликовать междоменный домен
файл политики и гарантирует, что заголовки HTTP, связанные с SOAP, будут
послал. Эта ошибка также может быть вызвана использованием внутренних типов в Интернете
прокси службы без использования атрибута InternalsVisibleToAttribute.
Пожалуйста, смотрите внутреннее исключение для более подробной информации. --->
System.Security.SecurityException --->
System.Security.SecurityException: ошибка безопасности ...
Используя Fiddler, я вижу, что к crossdomain.xml или clientaccesspolicy.xml не делается никаких запросов. Существует запрос CONNECT на сервер, но это все.
Я читал, что эта ошибка, хотя и указывает на проблему с crossdomain.xml / clientaccesspolicy.xml, также может возникать, когда сервер выдает недействительный сертификат. Похоже, что это не так в моем сценарии.
Я уверен, что правильно настроено следующее:
1. crossdomain.xml действителен и размещен в корневом каталоге сайта
2. Сервисы работают (у нас есть другие клиенты, использующие различные технологии, в том числе Adobe Flex, использующий crossdomain.xml.)
3. Приложение Silverlight работает (оно отлично работает с локальными службами и службами на общем сервере разработки ***)
4. Приложение Silverlight даже не пытается запросить crossdomain.xml или clientaccesspolicy.xml (что подтверждено Fiddler)
5. Приложение Silverlight использует правильную конфигурацию для доступа к WCF через https. Ниже приведена конфигурация:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyServices" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://MYDOMAIN/MYSERVICE.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyServices" contract="Services.IMyServices" name="BasicHttpBinding_IMyServices" />
</client>
</system.serviceModel>
</configuration>
Что еще может вызвать такую проблему? Может быть потому, что веб-серверы сбалансированы по нагрузке? Или есть проблема с сертификатом, который я не заметил? Если бы вы могли, по крайней мере, указать мне правильное направление, это было бы очень ценно.
(*** Что-то, на что стоит обратить внимание: я столкнулся с аналогичной проблемой в нашей среде разработки. Приложение Silverlight не смогло получить доступ к службам WCF на общем сервере разработки, несмотря на наличие надлежащего файла crossdomain.xml и отсутствие использования HTTPS. Я обошел это, добавив сервер разработки в качестве надежного сайта в IE. Однако этот же обходной путь не работает для производства, и даже тогда он не будет приемлемым обходным путем. Но тот факт, что я должен был сделать это в разработке окружающая среда заставляет меня беспокоиться, что я что-то пропустил по пути ...)