#silverlight #web-services #cross-domain
#silverlight #веб-сервисы #междоменный
Вопрос:
Если вы хотите получить доступ к некоторым веб-службам REST с помощью своего приложения Silverlight, стороннему серверу (на котором находится служба, к которой вы хотите получить доступ) требуется clientaccesspolicy.xml или crossdomain.xml в корневой папке.
Но как мне использовать или получить доступ к службе REST, которая отвечает XML-файлом, с моим приложением Silverlight, но БЕЗ каких-либо clientaccesspolicy.xml или crossdomain.xml быть на этом сервере?
если я напишу URL-адрес службы в поле адреса моего браузера, я смогу получить доступ к сервису и увидеть ответ в браузере. вы можете получить доступ к сервису с помощью GET.
редактировать: я уже предполагаю, что мне придется использовать какой-то прокси, но как для RESTful service? Это клиентский или серверный прокси?
С чего начать?
Ответ №1:
Политика безопасности SL запрещает вам доступ к адресам в другом домене. Итак, решение состоит в том, чтобы создать прокси-сервер в домене вашего приложения SL, который будет перенаправлять запросы на нужную вам веб-службу.
Комментарии:
1. Я знаю о прокси, но только с сервисами soap (wsdl). Как это сделать с помощью службы REST? Я не могу найти ни одного примера, как получить доступ к службе rest без crossdomain.xml но с прокси-сервером!
2. Вы должны закодировать прокси в своем веб-проекте, а не на стороне клиента. Таким образом, ваш сервер под управлением .NET (или Java или что-то еще) не попадает под ограничение безопасности Silverlight.
3. Да, но что это за прокси? Если бы я вызвал службу soap или wcf, я мог бы использовать этот инструмент SLsvcUtil.exe для создания прокси-серверов из документов метаданных службы. Но я вызываю службу REST.
4. Вы должны создать его вручную, с API, достаточным для выполнения всех ваших вызовов.
Ответ №2:
Приведенный выше ответ правильный. Я создал клиентскую библиотеку Silverlight, которая удобна для использования REST. Но, что более важно, я включил переход к службе REST API BitBucket на ASP.NET Ядро, которое демонстрирует, как включить clientaccesspolicy для Silverlight. Все это в этом репозитории Git:
https://bitbucket.org/MelbourneDeveloper/restclient-.net
NuGet для библиотеки — это установочный пакет RestClient.NET