Причина ошибки заключается в том, что проект является объектом запуска, выбранным в качестве проекта запуска.
Когда ваш проект запуска представляет собой проект MefPlugins (проект Silverlight) t, настройки проекта указывают, что веб-страница должна динамически создаваться для размещения приложения Silverlight (щелкните проект правой кнопкой мыши,выберите Свойства и перейдите на вкладку Отладка).
Проблема, с которой вы столкнулись, связана с расположением, используемым в качестве префикса для файла PluginsService.ashx
._baseAddress
устанавливается в конструкторе главной страницы следующим кодом:
var xapUri = App.Current.Host.Source;
_baseAddress = xapUri.AbsoluteUri
.Substring(0, xapUri.AbsoluteUri.IndexOf(xapUri.AbsolutePath))
+ "/";
Это означает, что Uri файла xap используется для определения базового URI.Теперь, когда в проекте используется динамически сгенерированная страница контейнера, которая находится на вашем жестком диске и запущена оттуда, вышеприведенный код получает корень файловой системы _baseAddress
.Очевидно, что код не найдет страницу PluginsService.ashx
, так как ее там нет.
Кроме того, для файла .ashx
требуется некоторая форма прослушивателя http, которая направляет запрос от порта на вашу страницу .ashx
.Слушателем может быть веб-сервер, такой как IIS, или веб-сервер разработки, или какой-либо прослушиватель, который вы внедрили самостоятельно.
Чтобы решить эту проблему, создайте проект запуска MefPlugins.Web и установите MefPluginsTestPage.aspx
как стартовая страница.Теперь _baseAddress
должно быть чем-то похожим на http://localhost:6584/
.
Когда этот базовый адрес теперь используется для поиска страницы PluginsService.ashx
, это приведет к правильному URI для ресурса (http://localhost:6584/PluginsService.ashx
в нашем случае).
В общем .ashx
файлы являются расширениями веб-службы (IIS, отладочный веб-сервер или даже некоторые собственные реализации), они не часть клиента Silverlight.