Вызов службы REST из Silverlight - PullRequest
2 голосов
/ 28 июня 2011

Я создаю веб-приложение Silverlight 4.0 для нашей интрасети, которое подключается к серверу через REST для получения данных.Я использую Visual Studio 2010.

Я использую следующий код в методе для выполнения запроса:

var wc = new WebClient();
const string uri = "http://server/api/statistics.svc/overall/";

wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri(uri, UriKind.Absolute));

Мой обработчик события OnReadCompleted:

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    var buffer = new byte[e.Result.Length];

    e.Result.Read(buffer,0,(int)e.Result.Length);

    var xmlstr = buffer.Aggregate(String.Empty, (current, t) => current + (char) t);

    // Do something with xmlstr...
}

Моя проблема возникает при попытке запустить приложение.Исключение выдается на первой строке в обработчике события wc_OpenReadCompleted и имеет следующие сведения:

 TargetInvocationException: An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.

Внутреннее исключение:

 System.Security.SecurityException: Security error.

Моя служба REST не использует никакой аутентификации.

Я создал файл clientaccesspolicy.xml со следующими настройками:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/api/statistics.svc/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Ваша помощь очень важна!

Спасибо,

Джеффри Кевин Прай

ОБНОВЛЕНИЕ

Я не указал / api / в моем XML-файле.Проблема решена.

Спасибо!

1 Ответ

2 голосов
/ 28 июня 2011

Вашему приложению Silverlight разрешено подключаться только к серверу, с которого оно было загружено, и к серверам, на которых имеется файл междоменной политики. Это известно как Одинаковая политика происхождения . Соединения с любым другим сервером запрещены по соображениям безопасности.

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