Ошибка Silverlight 4 WCF "Междоменный" - PullRequest
1 голос
/ 18 мая 2011

У нас есть служба WCF, работающая на удаленном сервере. Он работает как служба Windows, а не размещается в IIS. Мы можем без проблем использовать этот сервис WCF из наших приложений WinForms и WFP. Однако, когда мы пытаемся запустить его из приложения Silverlight 4, мы получаем следующую ошибку:

Произошла ошибка при попытке сделать запрос к URI 'http://111.111.111.111/8484/Psn'. Это может быть связано с попыткой доступа к услуге междоменным способом без надлежащей междоменной политики, или политика, которая не подходит для сервисов SOAP. Вам может потребоваться связаться с владельцем сервиса, чтобы опубликовать файл междоменной политики и убедиться, что он позволяет отправлять HTTP-заголовки, связанные с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в прокси-сервере веб-службы без использования атрибута InternalsVisibleToAttribute. Пожалуйста, смотрите внутреннее исключение для более подробной информации.

Может кто-нибудь перевести это на английский и объяснить, что я могу сделать, чтобы удовлетворить Silverlight?

1 Ответ

2 голосов
/ 18 мая 2011

Первое, что нужно проверить - у вас есть файл clientaccesspolicy.xml или crossdomain.xml на хосте службы WCF.Любой из этих файлов может использоваться для контроля того, какие домены имеют доступ к вашему сервису.Без них никто не имеет доступа из Silverlight.Эти файлы находятся в корне хоста службы WCF:

Если, например, служба размещена в http://fabrikam.com, тогда файл должен находиться в http://fabrikam.com/clientaccesspolicy.xml... [или] ... http://fabrikam.com/crossdomain.xml.

Следующий файл clientaccesspolicy.xml разрешит доступ из http://www.example.com, но заблокирует его из других мест:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="http://www.example.com"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Аналогичный файл crossdomain.xml будет иметь вид:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-http-request-headers-from domain="http://www.example.com" headers="SOAPAction,Content-Type"/>
</cross-domain-policy>

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...