Silverlight Rest Service, исключение безопасности - PullRequest
13 голосов
/ 31 октября 2008

Я пытаюсь заставить Silverlight работать с быстрым примером приложения и вызываю службу отдыха на другом компьютере. На сервере, на котором установлена ​​служба отдыха, имеется clientaccesspolicy.xml, который выглядит следующим образом:

<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

И он забирается (по крайней мере, в соответствии с трассировкой сети, которую я запустил), и нет запроса на crossdomain.xml. Код C # выглядит так:

public Page()
{
    InitializeComponent();

    string restUrl = "http://example.com/rest_service.html?action=test_result";

    WebClient testService = new WebClient();
    testService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(testService_DownloadStringCompleted);
    testService.DownloadStringAsync(new Uri(restUrl, UriKind.Absolute));

}

void testService_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        LoadTreeViewWithData(e.Result);
    }
}

Однако я всегда получаю следующую ошибку безопасности:

{System.Security.SecurityException ---> System.Security.SecurityException: Security error.
   at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.BrowserHttpWebRequest.c__DisplayClass5.b__4(Object sendState)
   at System.Net.AsyncHelper.c__DisplayClass2.b__0(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)}

Что я делаю не так? И почему ошибка безопасности не дает мне больше полезной информации?

Ответы [ 3 ]

8 голосов
/ 01 ноября 2008

Если вы еще этого не сделали, я сначала попробую изменить restUrl на что-то более простое, например, статическую HTML-страницу на том же сервере (или, если необходимо, на вашем собственном сервере), просто чтобы убедиться, что ваш основной код работает.

Предполагая, что исключение безопасности относится только к этому REST URL (или сайту), вы можете взглянуть на статью Ограничения доступа к URL в Silverlight 2 . Существуют некоторые неочевидные правила безопасности, касающиеся типов файлов и «интернет-зон», в дополнение к более известным междоменным правилам.

Я подаю жалобу на то, что многие сообщения об исключениях в Silverlight не очень полезны. Вышеупомянутая статья MSDN содержит забавную заметку:

Когда пользователи получают ошибку, которая является результатом нарушения одной из этих политик доступа, ошибка может не указывать точную причину.

4 голосов
/ 19 августа 2011

Я не мог выполнить междоменное удаление HTTP REST без добавления http-method = "*" к элементу allow-from в clientaccesspolicy.xml. Когда я добавил атрибут http-method, все заработало, и исключение SecurityException прекратилось.

0 голосов
/ 12 января 2010

Не удалось загрузить HTML-страницы с «Надежного сайта» для моего локального приложения (http://localhost/) - до тех пор, пока я не добавил localhost в список доверенных сайтов.

Silverlight предотвращает вызовы «между зонами» (в моем случае «Локальная сеть против надежных сайтов») и вызовы «перекрестной схемы» (например, http против https).

И до сих пор он работает только с файлом "crossdomain.xml". Сначала я попробовал "clientaccesspolicy.xml", но ничего не получилось.

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