powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перекомпиляция dll без выгрузки AppDomain
25 сообщений из 34, страница 1 из 2
Перекомпиляция dll без выгрузки AppDomain
    #38782024
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую

Есть приложение, где реализованна возможность пользователям создавать свои задачи (реакция на собятия -бинес логики на C#)
Это описание компилируется в dll и выполнетеся при наступлении определенных событий.

При перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются.
Задачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток. Например документ ждет визы главбуха, а визу могут поставить через неделю после запуска.

Как можно сделать изминение задач пользователями, чтобы старые задачи продолжали работать? те как я понимаю не выгружать AppDomain.



Григорий
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782062
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlЗадачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток.
состояние таких задач не в памяти должно жить, а в базе данных

если приложение аварийно завершится или в бесперебойнике батарейки закончатся - главбух никогда визу не поставит?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782092
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
естественно библиотека ранится в БД.
При изминении перекомпилируется dll, загружается в бд, выгружается домен загружается обновленная dll и клиентсикие задачи валятся.

Чтото по существу решения задачи можете добавить?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782103
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто компилирует эти dll-ки? Вы по сути хотите сделать динамическое подсовывание нового кода в рантайме, не выгружая при этом старый. Это очень нетривиальная задача, и без различных ухищрений, вы это сделать не сможете.
Возможные направления:
- Давать уникальные имена классам в dll-ках. Например, TaskV1, TaskV2, ...
- Подгружать новые таски в отдельные апп-домены.

Но вообще сам факт того, что вы обновляете одни задачи, не выгружая при этом старые - это уже подход, попахивающий кривизной. Хотя хз, я не знаю контекста вашей задачи.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782113
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlЗадачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток.
А зачем при этом держать задачу за яйца? Отпусти её на покой. Когда час икс наступит, поднимай задачу и выполняй её.

gr_vlНапример документ ждет визы главбуха, а визу могут поставить через неделю после запуска.
Ну ты сам подумай, зачем тратить ресурсы на обычный простой. Sequential Workflow и State-Machine Workflow отлично решаются с помощью БД, как выше уже сказали. А глупости по поводу AppDomain ты это брось :)
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782143
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
просто есть службы колторые работают круглосуточно, для которых часа Х нужно ждать месяцами.
Пожалуста не предлагайте выриантов типа "отпустить задачу".

Вопрос конкретизирован и если бы можно было обойтись никтобы не стал бы усложнять себе жизнь.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782160
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vl,

WWF .
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782218
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlМСУ, просто есть службы колторые работают круглосуточно, для которых часа Х нужно ждать месяцами.
Я понял. И привел аргументы, почему это плохо.

gr_vlПожалуста не предлагайте выриантов типа "отпустить задачу".
Почему?

gr_vlВопрос конкретизирован и если бы можно было обойтись никтобы не стал бы усложнять себе жизнь.
То есть сначала ломаем себе ноги, а потом конкретизируем, что хочется ходить как все?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782310
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782315
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlМСУ,

Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить

Для одаренных советую прочитать свой вопрос, он там всего один:
gr_vlКак можно сделать изминение задач пользователями, чтобы старые задачи продолжали работать?

Вам 4 человека сказали, что ваша реализация кривая. И ваш вопрос прекрасно решается с помощью Workflow, ссылку на майкрософтовскую реализацию я привел. Собственно, для такого класса задач это и было придумано.

Что касается вашей чудо-архитектуры, то в рамках нее cdtyjv дал четкий ответ. Хотя я себе не представляю, как вы без сохранения состояний в БД сумеете обеспечить бесперебойную работу в течении месяцев, ожидая своего часа Х
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782789
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Внимательно прочтите вопрос, в нем нет ни слова об обсуждении технологии от меня требуется реализовать поставленую задачу а не отбырыкиватся типа применяемая технология неправильная. WWF это довольно тяжелый и громоздкий фрэймворк, переход на него длитьелен и тяжел.
Есть еще варианты?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38782855
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlArm79,

Внимательно прочтите вопрос, в нем нет ни слова об обсуждении технологии от меня требуется реализовать поставленую задачу а не отбырыкиватся типа применяемая технология неправильная. WWF это довольно тяжелый и громоздкий фрэймворк, переход на него длитьелен и тяжел.
Есть еще варианты?

Давайте вы сначала расскажите, как вы в вашем варианте ожидаете события, которое должно произойти через 3 месяца.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783247
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlМСУ, Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить
Вопрос сформулирован корректно. Некорректно поставлена задача. Для тех, кто в танке, задача крива как искривленное создание неофита. Как задачу поставить на правильные рельсы - уже объяснили. Хочешь бороться с ветряными мельницами с переломанными ногами? Вперед, прибивай апп домены, выключай сервера, туши свет.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783473
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Если ты не знаешь как решить поставленную задачу то можно было просто промолчать, в данном случае не писать.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783474
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Все тривиально состояние (в том числе промежуточные стадии) таска хранятся в БД, что естественно для многопользовательской системы
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783483
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlПри перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются.

что есть "задача, написанная пользователем" ?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783502
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlArm79,

Все тривиально состояние (в том числе промежуточные стадии) таска хранятся в БД, что естественно для многопользовательской системы

Итак, мы получили, что есть некий пользовательский таск, который имеет промежуточное состояние, сериализуемое в БД. Получился велосипед, ибо это и есть Workflow, и WWF был бы тут очень к месту.

В таком случае я не понимаю, почему вы паникуете, если dll была выгружена, а потом снова загружена? Если каждый бизнес-процесс - это отдельная dll, то при старте приложения все dll будут загружены обратно, таск десериализован из Бд и, при необходимости, исполнен
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783693
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Проблема не в том что будут продолжены а в том что будут прерваны
Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска)
Те как коректировать таски без срыва работы уже запущенных задач.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783698
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlArm79,
Проблема не в том что будут продолжены а в том что будут прерваны
Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска)
Те как коректировать таски без срыва работы уже запущенных задач.Версионность. Почему вы не хотите решить эту проблему через версии?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783703
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не понмаю проблемы. В домен никто не запрещает загружать сборки. Выгружать их нельзя по одной.

Зачем и как это: "При перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются"?
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783708
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlArm79,
Проблема не в том что будут продолжены а в том что будут прерваны
Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска)
Те как коректировать таски без срыва работы уже запущенных задач.

Вы знаете, довольно трудно что-то вам говорить, ведь вы конкретику совершенно не даете. Вам уже правильно сказали про версионность. Версию вашего workflow также сериализуйте и все. Главное, чтобы админ не удалил старую dll, все изменения должны быть в новой. Ну или можно оставить старую, но вам в workflow придется прописать блоки if

типа if первая версия, то такой то алгоритм, if вторая - такой то.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38783721
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlКак можно сделать изминение задач пользователямиЭто можно сделать, только до начала выполнения задачи, то есть до загрузки сборки в домен.
После этого можно только прекратить выполнение текущей задачи через базу, а требуемые изменения оформить в новую версию, в новую dll.
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38784023
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlМСУ,

Если ты не знаешь как решить поставленную задачу то можно было просто промолчать, в данном случае не писать.



а грубить некрасиво...
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38784422
gr_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Счас рассматриваю вариант :
В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Выполнение разных версий пользовательских задач осуществляется в разных доменах приложения.

Домен, содержащий сборку с более ненужной версией пользовательского таска, можно выгрузить без остановки всего приложения.

Как вам такой вариант? ктото пытался чтото подобное использовать???

Григорий
...
Рейтинг: 0 / 0
Перекомпиляция dll без выгрузки AppDomain
    #38784441
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gr_vlskyANA,

Счас рассматриваю вариант :
В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Выполнение разных версий пользовательских задач осуществляется в разных доменах приложения.

Домен, содержащий сборку с более ненужной версией пользовательского таска, можно выгрузить без остановки всего приложения.

Как вам такой вариант? ктото пытался чтото подобное использовать???

ГригорийЭто нормальный вариант в принципе. Другое дело, что вы можете захлебнуться во множестве застартованных доменов, если версии задач будут обновляться достаточно часто, а задачи будут долгие.
О каком количестве задачи и частоте их изменений мы говорим?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перекомпиляция dll без выгрузки AppDomain
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]