Я должен создать сервис в.NET, которая поддерживает (внутреннее) состояние, в оперативной памяти, порождает несколько потоков и обычно продолжительна. Существует много опций -
Я действительно не знаю, чтобы выбрать. Большая часть функциональности находится в библиотеке, пользовавшейся этим сервисом, таким образом, сам сервис довольно прост.
С одной стороны важно, чтобы сервисный хост был как близко к "просто работающий" возможным, который исключает службу Windows. С другой стороны, важно, чтобы сервис не был удален хостом просто, потому что нет никакого внешнего действия, которое делает вид WCF o' "страшным". Что касается WF, это - самый сильный коммерческий аргумент, способность создать процессы как, гм..., рабочие процессы, который является чем-то, которое я не нуждаюсь, ни хочу.
Для подведения его изобилие технологий Microsoft получило меня немного перепутанный.
Я ценил бы справку относительно за и против каждого решения (или других, мне не удалось упомянуть) для проблемы длительного сервиса с сохранением информации в.NET
Спасибо,
Asaf
P.S.,
Я использую.NET 4.
Править:
Спасибо за все ответы к настоящему времени!
Asaf.
РЕДАКТИРОВАНИЕ 2:
Я буду использовать службу Windows и мог бы разместить сервис WCF в нем, чтобы позволить другим процессам общаться с ним.
Спасибо,
Asaf
Ba sed в вашем описании, ваш лучший выбор - № 1, Старая добрая служба Windows. Вы можете назначить ему работу, он может работать сколько угодно долго и может порождать потоки. Не уверен, что вы имеете в виду под «просто работающим» или почему это останавливает работу службы Windows.
Вы также можете создать простое консольное приложение, но вам придется самостоятельно выполнять управление (перезапуск и т. Д.).
WCF - это, по сути, удаленное взаимодействие .NET через Интернет, он не обрабатывает долго-запущенные процессы сами по себе. Workflow Foundation может обрабатывать длительные рабочие процессы , но только это.
Может быть, зайдите на Quartz.Net ? Это скорее планировщик, но вы можете запускать задания и т. Д. В нескольких потоках. Я с большим успехом использовал это вместо службы Windows.
Так как вам, похоже, не нужны какие-либо функции, связанные с рабочим процессом, я голосую за службы Durable Services в WCF. Это новинка в .NET 3.5, и она позволяет сервисам WCF сохранять свое состояние в «хранилище сохраняемости» на основе поставщика, обычно в серверной базе данных SQL Server (но есть также поставщик на основе файловой системы, и он расширяемый - вы можете написать свой собственный, если нужно).
Посмотрите несколько отличных сообщений в блогах по этой теме:
WCF - отличная и мощная коммуникационная библиотека, которая избавляет вас от множества хлопот и деталей, с которыми вам придется иметь дело при создании всего этого с нуля.
WCF может быть размещен в IIS (со всеми его недостатками), или вы можете вставить свою службу WCF в службу Windows NT, чтобы она запускалась и запускалась при загрузке машины без какого-либо входа в систему.
Я бы посоветовал старый добрый сервис Windows. Я написал очень много сервисов, используя C # именно для этих целей. Они могут порождать потоки, работать вечно и хорошо разработаны, чтобы делать то, что вы хотите. Вы можете создать службу Windows .NET прямо в Visual Studio. Это один из типов проектов .net.
WCS и WCF будут делать то, что вы хотите, но требуют дополнительной работы и на самом деле не были разработаны для того, что вы, кажется, хотите делать.
В соответствии с вашими требованиями «(внутреннее) состояние в памяти, порождает несколько потоков и обычно выполняется долго», на самом деле есть два варианта:
Другие два упомянутых являются производными из этих. Первый слишком примитивен, забудем об этом. Но для простоты отладки я рекомендую в Main
проверить Environment.UserInteractive
и, если это правда, запускать как консольное приложение, иначе как службу. Так что ваш выбор должен быть вторым.
WCF - это среда коммуникации, в которой ничего не говорится о длительной работе. IIS может размещать приложения WCF, но без многопоточности и данных в памяти, это единственный вызов в качестве веб-службы. WF - это фреймворк рабочего процесса, который опять же ничего не говорит о сервисах. Это может помочь реализовать сложную логику потока.
В службе Windows можно использовать как WCF, так и WF.
Похоже, вариантов не так много, как хотелось бы! ;P
EDIT Моим первым выбором также была бы служба Windows, но это проще через планировщик.