междоменная проблема при доступе к Silverlight и wCF - PullRequest
0 голосов
/ 29 марта 2011

Я написал службу WCF, а также написал (в том же решении) клиент Silverlight.Я пытаюсь получить доступ к службе WCF из клиента Silverlight - и я получаю междоменное исключение.

это происходит только тогда, когда я запускаю систему на сервере (через IIS 7.5)

Я попытался запустить ту же систему (сервер wcf и клиент silverlight) на моей локальной машине, но этого не произошло.

Исключение:

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

Я видел в Интернете, что мне нужно добавить что-то вроде ICrossDomainService - но я не знаю, где мне нужно определить их в моем проекте (в проекте silverlight?на проекте сервера WCF?)

Кто-нибудь может мне помочь, пожалуйста?

Спасибо.

1 Ответ

1 голос
/ 29 марта 2011

Я думаю, вам нужно создать файл политики клиентского доступа в корневой папке веб-сайта.

Это описано здесь: http://msdn.microsoft.com/en-us/library/cc645032(v=vs.95).aspx

Файл политики выглядит следующим образом, и вам нужно будет настроить его в соответствии с вашими междоменными требованиями. Этот пример взят из MSDN и, вероятно, не может быть использован без изменений.

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
<!--Enables Silverlight 3 all methods functionality-->
    <policy>
      <allow-from http-methods="*">      
        <domain uri="*"/>
      </allow-from>      
      <grant-to>      
        <resource path="/api" include-subpaths="true"/>
      </grant-to>      
    </policy>
<!--Enables Silverlight 2 clients to continue to work normally -->
    <policy>
      <allow-from >      
        <domain uri="*"/>
      </allow-from>      
      <grant-to>      
        <resource path="/api" include-subpaths="true"/>
      </grant-to>      
    </policy>
  </cross-domain-access>
</access-policy>

Я не слишком знаком со схемой, но я бы снова нажал на MSDN. Примерно так может быть ближе:

</cross-domain-access>
  <policy>
    <allow-from>
      <domain uri="*"/>
    </allow-from>
    <grant-to>
      <resource/>
    </grant-to>
  </policy>
</cross-domain-access>

ПОЖАЛУЙСТА, проверьте MSDN, чтобы убедиться, что вы не открыли дыру в безопасности!

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