Создание элемента управления Silverlight в обработчике HTTP, ... Возможно? - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть HTTP-обработчик в проекте ASP.Net, и я хотел создать изображение на основе пользовательского элемента управления Silverlight, отображаемого как растровое изображение.

Однако в ProcessRequest, когда я пытаюсь создать экземпляр какого-либо элемента управления Xaml, я получаю следующее исключение ....

{"Инициализатор типа для «MS.Internal.JoltHelper» бросил исключение. "}

... со следующей трассировкой стека ...

в MS.Internal.JoltHelper.get_ThreadID () в MS.Internal.XcpImports.CheckThread ()
в System.Windows.DependencyObject..ctor (UInt32 nativeTypeIndex, IntPtr constructDO)
в System.Windows.Controls.UserControl..ctor () в CaseCard..ctor () в C: WORKING_FOLDER \ Ствол \ ProActive \ ProActive.UI \ CaseCard.xaml.vb: линия 6 в ServiceLocator.GetCard () в C: WORKING_FOLDER \ Ствол \ ProActive \ ProActive.UI \ ServiceLocator.vb: линия 20 в ProActive.Host.ImageGeneratorHandler.ProcessRequest (HttpContext контекст) в с: WORKING_FOLDER \ Ствол \ ProActive \ ProActive.Host \ App_Code \ ImageGeneratorHandler.cs: линия 10 в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, логическое и завершено синхронно)

... и внутреннее исключение это ...

{"Не удалось загрузить файл или сборку 'System.Xml, версия = 2.0.5.0, Culture = нейтрально, PublicKeyToken = 7cec85d7bea7798e 'или одна из его зависимостей. Система не могу найти файл указано ":". System.Xml, Версия = 2.0.5.0, Культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e "} * * одна тысяча двадцать-одна

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

Тем не менее, я начинаю задаваться вопросом, возможно ли это, поскольку Silverlight работает на совершенно другой платформе. Мне действительно нужно возвращаться в GDI +, чтобы сделать это?

Любая помощь очень ценится.

1 Ответ

1 голос
/ 01 декабря 2010

Причина, по которой это не работает, заключается в том, что ваш ASP-код выполняется в контексте полной платформы .NET и при попытке создания экземпляра элемента управления Silverligt - как говорится в исключении - сборка System.Xml с версией 2.0. 5.0 не загружается / не найден.

Обратите внимание на версию: 2.0.5.0. Все базовые библиотеки Silverlight имеют эту версию вместо «нормальной» версии .NET, такой как 2.0.0.0.

Это не случайно - Silverlight работает в контексте небольшого CLR, который является подмножеством обычного CLR. Это не тот же CLR, хотя большая его часть полностью идентична, и хотя ваш исходный код на C # точно такой же, время выполнения не идентично.

В настоящее время вы не можете смешивать код Silverlight с полным кодом на основе .NET, например ASP.NET.

В Microsoft проделана определенная работа по извлечению общего ядра обычных .NET и Silverlight (на самом деле пара библиотек) для лучшего обмена, но это еще не доступно для общественности.

Также обратите внимание, что если код source одной из ваших библиотек Silverlight 4.0 не использует специальный код Silverlight, вы можете загрузить его в обычный процесс .NET, но обратное, очевидно, невозможно ( Silverlight является подмножеством, а не наоборот).

Помимо всего этого, вы можете достичь своей цели:

  1. Запуск OOB приложения Silverlight на сервере и связь со страницами ASP.NET через какой-то механизм IPC
  2. Перекомпилируйте код в WPF и загрузите его; когда я говорю «перекомпилировать», я действительно имею в виду адаптацию / рефакторинг, поскольку Silverlight UI не является чистым подмножеством WPF

Ни одна из особенностей не проста, хотя я склоняюсь ко второму варианту, он чище.

...