Silverlight: загрузка локальных файлов с помощью WebClient - PullRequest
3 голосов
/ 06 мая 2010

Структура каталогов моего проекта Silverlight выглядит следующим образом:

\Bin
- MainModule.xap
- \Images
--- Image1.png
--- Image2.png
- \Modules
--- SubModule.xap

Я хочу иметь возможность запустить его через веб-сервер или напрямую через Visual Studio (в целях отладки я хочу обойти загрузку контента).

В моем коде загрузки медиа я делаю что-то вроде следующего:

if (runningLocally)
{
    var bitmapImage = new BitmapImage();
    bitmapImage.UriSource = new Uri("Images/Image1.png", UriKind.Relative);
    var image = new Image();
    image.Source = bitmapImage;
}
else
{
    WebClient wc = new WebClient();
    wc.OpenReadCompleted += (s, e) =>
    {
        var bitmapImage = new BitmapImage();
        bitmapImage.SetSource(e.Result);
        var image = new Image();
        image.Source = bitmapImage;
    };
    wc.OpenReadAsync(new Uri("Images/Image1.png", UriKind.Relative));
}

Это работает для изображений, но у меня также есть подмодули, которые являются просто сборками, вмещающими UserControl s. Поскольку Silverlight не умеет читать диск, я смирился с тем, что мне придется «скачивать» нужные мне XAP независимо от того, запущен я локально или нет. Проблема в том, что если я запускаю проект локально и пытаюсь использовать WebClient для загрузки XAP, я получаю исключение:

System.Net.WebException: An exception occurred during a WebClient request. ---> System.NotSupportedException: The URI prefix is not recognized.

Есть ли какой-либо способ (WebClient или иным образом), чтобы я мог получить доступ к своим XAP подмодуля при непосредственном запуске проекта Silverlight вместо попадания на веб-сервер?

EDIT:

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

Ответы [ 2 ]

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

Мой дизайн пытался получить доступ к файлам с локального диска, что не разрешено в Silverlight.У меня до сих пор нет хорошего ответа на вопрос, почему вы можете запустить приложение Silverlight с диска в Visual Studio, и оно может успешно считывать изображения / видео / аудио с диска.

0 голосов
/ 07 мая 2010

Если вы не хотите загружать одни и те же файлы с сервера снова и снова (во время отладки), загрузите их с сервера один раз, используя WebClient, а затем сохраните их в IsolatedStorage.

Следующий код поможет вам начать:

// read/write from/to IsolatedStorage
IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForSite.OpenFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...