В настоящее время я разрабатываю клиент-серверное приложение. Он должен загружать интерфейсы из модулей и показывать их внутри собственного окна. Но иногда мне нужно подключить удаленный модуль. Могу ли я запустить форму из модуля (со всеми действиями) без загрузки файла модуля на диск? Спасибо.Загрузить интерфейс с удаленного узла
ответ
Да, вы можете загрузить сборку отправленного с удаленного компьютера (я не буду обсуждать здесь последствия для безопасности этого, я бы - по крайней мере - проверить подпись):
var data = new WebClient.DownloadData(url); // For example...
var assembly = Assembly.Load(data);
В C++/CLI (это не ясно, в вашем вопросе то, что язык вы используете):
array<Byte>^ data = (gcnew WebClient())->DownloadData(url);
Assembly^ assembly = Assembly::Load(data);
Теперь у вас есть сборка и вы можете загрузить что-то из него, например (только для иллюстрации):
var plugins = assembly.GetExportedTypes()
.Where(x => typeof(IYourContract).IsAssignableFrom(x) && !x.IsAbstract)
.Select(x => (IYourContract)Activator.CreateInstance(x));
Обратите внимание, что это очень наивная реализация, потому что каждый экземпляр будет отличаться (если вы загружаете один и тот же плагин несколько раз), а также экспансивным с точки зрения ресурсов (первичной памяти). Вы должны хранить кеш сборки:
private static Dictionary<string, Assembly> _cachedAssemblies =
new Dictionary<string, Assembly>();
public static Assembly LoadRemoteAssembly(string url)
{
lock (_cachedAssemblies)
{
if (_cachedAssemblies.ContainsKey(url))
return _cachedAssemblies[url];
var data = new WebClient.DownloadData(url); // For example...
var assembly = Assembly.Load(data);
_cachedAssemblies.Add(url, assembly);
return assembly;
}
}
спасибо. Итак, я загружу его с помощью WebClient, но в память? Еще один вопрос: могу ли я загрузить только один класс (только форму) из него или всего файла? – Michail
@Michail да, вот и все. Пожалуйста, позаботьтесь о том, чтобы не загружать и загружать в память одну и ту же сборку более одного раза (во избежание странных действий, которые этот _may_ производит и уменьшает использование памяти). Нет, вы не можете загрузить только один тип, если вы загружаете одну сборку, она будет полностью загружена в память (но JIT-компилятор будет достаточно умным, чтобы скомпилировать только то, что нужно). Обратите внимание, что зависимости должны быть доступны и на стороне клиента. Существуют другие методы для достижения аналогичных результатов, но я не могу быть более конкретным без более подробного контекста. –
Существует более подробная информация: это центральная панель инструментов. После аутентификации пользователя я настраиваю его только с использованием указанных модулей. Некоторые модули могут быть размещены на удаленных станциях. Я хочу избежать загрузки ненужных вещей и снижения сетевой нагрузки. Я не могу заранее знать размер будущих модулей. Они будут добавлены в течение всего жизненного цикла приложения. Можно ли это сделать другими методами, сравнивая WebClient? – Michail
- 1. загрузить файл с удаленного места
- 2. Загрузить .txt с удаленного сервера
- 3. Добавление удаленного узла Drupal/ubercart
- 4. Erlang определяет «тип» удаленного узла
- 5. Erlang: запуск удаленного узла программно
- 6. Как загрузить файлы с удаленного сервера Windows
- 7. Как загрузить файл XML с удаленного сайта
- 8. Невозможно загрузить exe-файл с удаленного места
- 9. Visual Studio: загрузить проект с удаленного места
- 10. Загрузить pdf с использованием удаленного метода
- 11. Загрузить файл с удаленного сервера ... (PHP)
- 12. MVC Загрузить файл с удаленного сервера
- 13. Загрузить данные с удаленного сервера на улей
- 14. Загрузить файл с удаленного расположения сервера
- 15. Как получить переменные среды удаленного узла
- 16. Приложение удаленного отладочного узла в Docker
- 17. Сделать Akka порождением процесса для удаленного узла
- 18. Загрузить изображение с узла с веб-камерой
- 19. Как обращаться с переадресацией HTTP 302 с удаленного узла .net?
- 20. Перенос файлов с удаленного узла на HDFS с помощью Flume
- 21. загрузить slack файл с помощью узла
- 22. Загрузить файл с узла на удаленный сервер
- 23. Как загрузить файл с помощью узла js?
- 24. Netbeans больше не загружает выходные файлы с удаленного узла сборки
- 25. Как реализовать интерфейс с удаленного сеанса сеанса без состояния?
- 26. Загрузить интерфейс с Primefaces 4.0 не работает
- 27. Экземпляр Proxy nexus не может загрузить артефакты с удаленного
- 28. как загрузить файл с удаленного сервера с помощью asp.net
- 29. Как загрузить определенные файлы с удаленного сервера с помощью SFTPClient?
- 30. Является ли интерфейс узла в Javascript объектом?
Adriano: спасибо. Итак, я загружу его с помощью WebClient, но в память? Еще один вопрос: могу ли я загрузить только один класс (только форму) из него или всего файла? – Michail