Как связать каждого пользователя, посещающего веб-приложение, с отдельным временным процессом, выделенным службой? - PullRequest
0 голосов
/ 28 июля 2010

Я хочу разработать веб-приложение с использованием ASP.NET, работающего на IIS.

Если пользователь отправляет команду ввода MAXIMA, указанный код попросит пользовательскую службу Windows создать новый отдельный временный процесс, выполняющий внешнюю сборку.

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

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

Обратите внимание: я использую процесс, а не домен приложения, поскольку внешняя сборка представляет собой пакетный файл (не управляемая сборка).

Мои вопросы:

  1. Как вызвать службу Windows из кода позади?
  2. Как связать каждого пользователя с отдельным временным процессом?
  3. Как улучшить масштабируемость, если одновременно работает все больше и больше пользователей?
  4. Если введенная пользователем команда ввода Maxima вызывает длительный процесс, каков разумный способ уведомить пользователя о прогрессе?

Следующая ссылка предоставит вам более подробную информацию о моем проекте: https://sourceforge.net/projects/aspmaxima/forums/forum/1190702/topic/3786806

Заранее спасибо.

1 Ответ

1 голос
/ 28 июля 2010

Вы не должны использовать codebehind в приложении MVC.

Масштабируемость при взаимодействии с неуправляемым кодом затруднена. Единственный разумный способ сделать это - разложить проблему.

  • Когда вы запускаете неуправляемое приложение, оно уже имеет собственный процесс.
  • Несколько потоков задач в службе, вызываемой из веб-приложения, с мониторингом? Вы описываете Windows Server AppFabric . Разместите свой сервис в AppFabric, и вам не придется писать все это самостоятельно.
  • Что касается масштабируемости, когда вы имеете дело с неуправляемыми процессами, вам придется ограничить число, которое может запускаться одновременно. Метод проб и ошибок будет необходим для определения оптимального для конкретного оборудования.
  • Вы можете отслеживать ход выполнения неуправляемой задачи, только если это предусмотрено в приложении.
  • Запуск произвольного неуправляемого кода из службы опасен, поскольку запущенное приложение по умолчанию наследует разрешения службы (как правило, повышенные). Рассмотрите возможность использования определенных, ограниченных учетных данных для запущенного приложения вместо значений по умолчанию.
...