2014-01-16 5 views
0

У меня есть проект asp.net, который создается с использованием многоуровневой архитектуры (Presentation, Business and Data Access layer). Теперь мне нужно добавить службу Windows в проект, который будет выполнять фоновый процесс. Пользователь может выйти с сайта, но служба будет работать в фоновом режиме. Это может занять несколько часов, чтобы закончить его задачу. У меня есть следующие вопросы.Служба Windows как Service Layer в многоуровневой архитектуре

  1. Можно ли включить эту службу Windows в отдельный проект в мое веб-приложение asp.net? Если да, то где он должен быть добавлен? Эта служба Windows может звонить из уровня Business. И служба будет взаимодействовать с базой данных. Я могу добавить его как отдельный уровень сервиса?

  2. Как я уже сказал, служба Windows будет работать в фоновом режиме, поэтому я могу создать поток внутри события OnStart для службы Windows для выполнения операции. Я прав? Я знаю, что это не очень хорошая практика для написания долгого процесса в событии OnStart. Вот почему я использую потоки. Но если другой пользователь войдет на сайт, служба снова вызовет и создаст новый рабочий поток. Есть ли проблема с производительностью в этом подходе?

Спасибо.

ответ

1

Лично я бы поместил сервис в его собственное решение. Я бы поставил клиента в веб-решение. В основном из-за того, что развертывание будет радикально отличаться и помочь сохранить API сервиса без искажений.

Вы недостаточно сказали о том, что служба будет делать, но я бы ожидал.

Когда пользователь входит в систему, отправляется уведомление на услугу. Войти (user_id)

OnStart в службе должен стартует слушающий поток

Тогда, когда услуга «слышит» для входа в систему (user_id) уведомление, что делает что-то вроде

if (LogInTaskThread == null) 
{ 
    LoginTaskThread = new Task("loginTask"); 
} 

Такого рода вещи в любом случае ...

0

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

Однако, если ваша служба Windows обслуживает вызовы внешних программ, вам может потребоваться обратиться к службе Windows Service как к уровню обслуживания.

Вы можете получить более четкое представление о слоях здесь http://serena-yeoh.blogspot.com/2013/06/layered-architecture-for-net.html

Смежные вопросы