0

Я хочу разработать веб-приложение с использованием ASP.NET, работающего на IIS.Как связать каждого пользователя с веб-приложением с отдельным временным процессом, назначенным службой?

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

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

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

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

Мои вопросы:

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

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

Спасибо заранее.

ответ

1

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

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

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