Длительный сервис с сохранением информации в.NET

Я должен создать сервис в.NET, которая поддерживает (внутреннее) состояние, в оперативной памяти, порождает несколько потоков и обычно продолжительна. Существует много опций -

  • Старая добрая служба Windows
  • Windows Communication Services
  • Windows Workflow Foundation

Я действительно не знаю, чтобы выбрать. Большая часть функциональности находится в библиотеке, пользовавшейся этим сервисом, таким образом, сам сервис довольно прост.

С одной стороны важно, чтобы сервисный хост был как близко к "просто работающий" возможным, который исключает службу Windows. С другой стороны, важно, чтобы сервис не был удален хостом просто, потому что нет никакого внешнего действия, которое делает вид WCF o' "страшным". Что касается WF, это - самый сильный коммерческий аргумент, способность создать процессы как, гм..., рабочие процессы, который является чем-то, которое я не нуждаюсь, ни хочу.

Для подведения его изобилие технологий Microsoft получило меня немного перепутанный.

Я ценил бы справку относительно за и против каждого решения (или других, мне не удалось упомянуть) для проблемы длительного сервиса с сохранением информации в.NET

Спасибо,
Asaf

P.S.,
Я использую.NET 4.

Править:

  • То, что я подразумеваю под хостом "просто работа", например, что сервис, который я создаю быть повторно активированным, если он отказывает.
  • Я предполагаю, что причина этого вопроса состоит в том, что я создал Windows Services в прошлом (я думаю, что это был в плоскости C++ с Win32 API), и я не хочу пропускать что-то более простое, если существует, таково как вещь.

Спасибо за все ответы к настоящему времени!
Asaf.

РЕДАКТИРОВАНИЕ 2:

Я буду использовать службу Windows и мог бы разместить сервис WCF в нем, чтобы позволить другим процессам общаться с ним.

Спасибо,
Asaf

9
задан Asaf R 12 March 2010 в 11:57
поделиться

6 ответов

Ba sed в вашем описании, ваш лучший выбор - № 1, Старая добрая служба Windows. Вы можете назначить ему работу, он может работать сколько угодно долго и может порождать потоки. Не уверен, что вы имеете в виду под «просто работающим» или почему это останавливает работу службы Windows.

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

WCF - это, по сути, удаленное взаимодействие .NET через Интернет, он не обрабатывает долго-запущенные процессы сами по себе. Workflow Foundation может обрабатывать длительные рабочие процессы , но только это.

7
ответ дан 4 December 2019 в 15:15
поделиться

Может быть, зайдите на Quartz.Net ? Это скорее планировщик, но вы можете запускать задания и т. Д. В нескольких потоках. Я с большим успехом использовал это вместо службы Windows.

0
ответ дан 4 December 2019 в 15:15
поделиться

Так как вам, похоже, не нужны какие-либо функции, связанные с рабочим процессом, я голосую за службы Durable Services в WCF. Это новинка в .NET 3.5, и она позволяет сервисам WCF сохранять свое состояние в «хранилище сохраняемости» на основе поставщика, обычно в серверной базе данных SQL Server (но есть также поставщик на основе файловой системы, и он расширяемый - вы можете написать свой собственный, если нужно).

Посмотрите несколько отличных сообщений в блогах по этой теме:

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

WCF может быть размещен в IIS (со всеми его недостатками), или вы можете вставить свою службу WCF в службу Windows NT, чтобы она запускалась и запускалась при загрузке машины без какого-либо входа в систему.

2
ответ дан 4 December 2019 в 15:15
поделиться

Я бы посоветовал старый добрый сервис Windows. Я написал очень много сервисов, используя C # именно для этих целей. Они могут порождать потоки, работать вечно и хорошо разработаны, чтобы делать то, что вы хотите. Вы можете создать службу Windows .NET прямо в Visual Studio. Это один из типов проектов .net.

WCS и WCF будут делать то, что вы хотите, но требуют дополнительной работы и на самом деле не были разработаны для того, что вы, кажется, хотите делать.

1
ответ дан 4 December 2019 в 15:15
поделиться

В соответствии с вашими требованиями «(внутреннее) состояние в памяти, порождает несколько потоков и обычно выполняется долго», на самом деле есть два варианта:

  1. Консольное приложение
  2. Служба Windows

Другие два упомянутых являются производными из этих. Первый слишком примитивен, забудем об этом. Но для простоты отладки я рекомендую в Main проверить Environment.UserInteractive и, если это правда, запускать как консольное приложение, иначе как службу. Так что ваш выбор должен быть вторым.

WCF - это среда коммуникации, в которой ничего не говорится о длительной работе. IIS может размещать приложения WCF, но без многопоточности и данных в памяти, это единственный вызов в качестве веб-службы. WF - это фреймворк рабочего процесса, который опять же ничего не говорит о сервисах. Это может помочь реализовать сложную логику потока.

В службе Windows можно использовать как WCF, так и WF.

3
ответ дан 4 December 2019 в 15:15
поделиться
  1. как можно более "просто работающий" - что исключает службу Windows...
  2. не сносится из-за неактивности... страшно - WCF...
  3. не нужен рабочий процесс, да и не хочется - Workflow Foundation...

Похоже, вариантов не так много, как хотелось бы! ;P

  • Как насчет простого EXE, который выполняет работу, и который запланирован через планировщик задач Windows? Вы управляете многопоточностью изнутри вашего приложения. Это может быть простое консольное приложение.

EDIT Моим первым выбором также была бы служба Windows, но это проще через планировщик.

0
ответ дан 4 December 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: