Как отключить междоменную защиту содержимого Silverlight для WriteableBitmap - PullRequest
1 голос
/ 15 июня 2010

У меня есть карта Esri в серебряном свете, и я пытаюсь получить скриншот.Однако я сталкиваюсь с междоменной защитой контента для writeablebitmap, говоря: «Пиксели недоступны».

Есть ли способ, которым я могу отключить это?или любая другая работа в Silverlight 3 или 4?

Ответы [ 4 ]

4 голосов
/ 01 сентября 2010

У меня есть видео, хранящиеся на сервере облачного фронта Amazon с действительным clientaccesspolicy.xml, чтобы разрешить междоменный доступ к URL-адресу хоста silverlight, и следующая функция не позволяла мне делать снимки экрана с видео и манипулировать пикселями, пока оно не было вместо этого вместо этого используется загрузка с WebClient (WebClient учитывает файлы междоменной политики, вы можете видеть, что он запрашивается в Fiddler, то, что функция MediaElement.Source даже не пыталась)

Старый не работающий междоменный код

public LoadVideoFromURL(string url)
{
    var uri = new Uri(url);

    myMediaElement.Source(uri);
}

новый рабочий междоменный код

public LoadVideoFromURL(string url)
{
    var uri = new Uri(url);

    //Request the video
    var videoDownloader = new WebClient();

    videoDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler( 
                 (s, args) => myMediaElement.SetSource(args.Result));

    videoDownloader.OpenReadAsync(uri);
}
2 голосов
/ 15 июня 2010

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

1 голос
/ 15 июня 2010

Самый простой способ обойти эту проблему - убедиться, что приложение Silverlight и изображения размещены в одном домене.Поскольку вы задаете этот вопрос, я предполагаю, что это невозможно.

Контролируете ли вы сервер, на котором размещены изображения?Если это так, вы можете добавить файл политики клиентского доступа, чтобы разрешить междоменный доступ к изображениям из приложения Silverlight.Затем вам нужно изменить, как вы потребляете эти изображения.Вместо того, чтобы устанавливать для элемента «Источник» элемента URI изображения, используйте WebClient, чтобы загрузить изображение в виде потока и установить источник элемента изображения непосредственно в этот поток.Если вы сделаете это, вы не столкнетесь с нарушениями междоменного доступа при попытке доступа к пикселям WriteableBitmap.

0 голосов
/ 15 июня 2010

Если источником растрового изображения является другой домен, простой ответ - нет.Я не уверен, как вы пытаетесь сделать этот «снимок экрана», но, похоже, есть веские причины безопасности, чтобы остановить это ... Конечно, полный (чтение / запись) доступ к пикселям доступен нормально, когда вашизображение находится в локальном домене.

Правильный способ решения этой проблемы, если вы, похоже, хотите сделать снимок экрана рабочего стола пользователя, состоит в том, чтобы приложение Silverlight требовало полного доверия, что возможно начиная с Silverlight 3(и расширен в Silverlight 4).Это, однако, требует, чтобы это был OOB (вне приложения браузера).

...