Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3

WCF + WindowsService

23.12.2017, 22:22. Показов 1664. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем есть задача написать небольшой проект, к которому в дальнейшем будет обращаться два-три других web-приложения. Явно напрашивается WCF. Но внутри него должен будет создаться некий пул обьектов (как временых, так и постояных), который будет в бєкграунде что-то делать и генерить некие ивенты для подключеных (скажем будем просто кидать сообщения в MQ). Причем очень нужно, чтобы по выключению/перезагрузке основного приложения, обьекты сейвили свое состояние. Тут уже больше бы подошло использование сервиса...

Пока у меня такие идеи:
- использовать только WCF, и уже в нем городить какие-то Job.
- использовать WCF как прослойку для отправки сообщений на windows servise через тот же MQ (либо вообще socet).
- вообще уйти от WCF и "клиенты" будут тупо кидать команды в MQ.

В общем, если у кого-то есть совет по этому, буду признателен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2017, 22:22
Ответы с готовыми решениями:

Автономное воспроизведение видео в WindowsService
Встала необходимость в автономном воспроизведении Видео. Задумка такова: Считывание информации из XML, и воспроизведение по времени. Все...

WCF vs WebAPI
WCF умер, не родившись толком? В чем плюсы и в чем минусы соперников?

Фоновые методы в wcf
В общем у меня еще воздик вопро есть ли исполняемый метод в службе wcf. В общем мне нужно запускать ряд методов чтобы они обрабатывали...

9
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.12.2017, 22:40
Цитата Сообщение от Wolfdp Посмотреть сообщение
если у кого-то есть совет по этому
Wolfdp, задача обрисована довольно расплывчата... Для сетевого взаимодействия я бы предложил, конечно, WCF, он удобнее всего остального. Судя по описанию, его можно сконфигурировать как синглет, ну и для страховки от неожиданностей закрутить запуск хоста в цикле с флагом продолжения в обработчике ошибок (если хост внезапно умрет, чтобы он автоматом сам перезапустился).
А дальше уже внутри самой службы делать все, что вам требуется.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
23.12.2017, 23:12  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
сконфигурировать как синглет
окей, допустим в AppInitialize закину старт нужных синглов и через тот же MEF/Unity буду их использовать.

Цитата Сообщение от insite2012 Посмотреть сообщение
если хост внезапно умрет, чтобы он автоматом сам перезапустился
Нет, вопрос не в "незапной смерти", а скорее в правильном выключении. Кстати да -- iis же может внезапно решить, что пулл можно и потушить. Насколько знаю, можно настроить таймаут на never, но задача отловки stop остается.

Чтобы не обсуждать абстрактного коня в вакуме, сведем задачу к созданию 10-ти обьектов такого вида

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public class TaskItem
    {
        public int Id { get; set; }
 
        public int Offset { get; set; }
 
        public int Total { get; set; }
 
        public EventHandler<int> ChangeTotal;
 
        private CancellationToken token;
 
        public TaskItem(int total, CancellationToken token)
        {
            Total = total;
            this.token = token;
        }
 
        public void Execute()
        {
            System.Threading.Tasks.Task.Run(() => {
                while (!token.IsCancellationRequested)
                {
                    Total += Offset;
                    ChangeTotal?.Invoke(this, Total);
                }
            });
        }
    }
ну и метод сервиса...
C#
1
2
3
4
5
6
7
    public class Service1 : IService1
    {
        public void GetOffset(int id, int offset)
        {
            var item = GetTaskById(id);
            item.Offset = offset;
        }
на stop, нам нужно сохранить total, сейвить по каждому чиху в БД не особо хочется.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.12.2017, 23:23
Цитата Сообщение от Wolfdp Посмотреть сообщение
да -- iis же может внезапно решить, что пулл можно и потушить.
О, так у вас IIS... С этим сложнее, контролировать, когда он перезапустит пул приложений сложно, да и сам он, при отсутствии запросов какое-то время вырубится, и все что в есть в службе бесследно исчезнет. IIS предназначен в основном для модели пришел запрос-пул приложений запустился, отработал запрос, подождал и пул выключился. Так что если вы хотите, чтобы служба постоянно хранила свое состояние-IIS вам не нужен. Только реальное хостовое приложение (ну или Windows- служба), внутри которого и будет работать хост, который вы сможете контролировать.
Если такая возможность есть-то все просто, используете простую модель с режимом сессии (если нужно контролировать созданные объекты из клиента в службе) или простой режим запрос-ответ (если нужно просто стартовать задачи на стороне сервиса, и далее они все сделают сами).
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
23.12.2017, 23:30  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
О, так у вас IIS...
WCF можно хостить на чем-то еще?

insite2012,
супер. Вот только гугля на запрос "C# windows service call public method" выдает кучу ответов плана
You don't "call" a windows service. You can send it commands (if you have sufficient privileges), and you can probably even set it up to be a WCF server.
Или предложение по сокетам/очереди/общей_памяти...
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.12.2017, 23:40
Лучший ответ Сообщение было отмечено Wolfdp как решение

Решение

Цитата Сообщение от Wolfdp Посмотреть сообщение
WCF можно хостить на чем-то еще?
Как угодно. Windows-служба, WinFoms, WPF, консоль, на ваш выбор.
Цитата Сообщение от Wolfdp Посмотреть сообщение
гугля на запрос "C# windows service call public method" выдает кучу ответов
Наверное не так спрашиваете. По сути задача-то тривиальная-устанавливаем на машину автозапускающуюся Windows-службу, в ее методе OnStart создаем объект службы и хост для нее и стартуем хост.
Естественно, есть и тонкости-смотря как запущена Windows-служба, она может иметь, а может и не иметь доступа к сессии пользователя, но это тонкости уже. В основном сложностей особо нет.
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
23.12.2017, 23:52  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Как угодно. Windows-служба, WinFoms, WPF, консоль, на ваш выбор.
Так, я явно зашел не с той стороны...
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.12.2017, 23:56
Лучший ответ Сообщение было отмечено Wolfdp как решение

Решение

Цитата Сообщение от Wolfdp Посмотреть сообщение
я явно зашел не с той стороны...
Возможно. Посмотрите ветку по WCF, да и у меня в блоге есть пара примеров-все они сделаны в консоли, так проще, когда сам явно управляешь запуском и остановкой хоста. WCF в этом плане не налагает никаких ограничений, хост службы должен быть размещен в работающем процессе ОС, а кто его предоставит-не суть важно.
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
24.12.2017, 01:35
Сервис будет ли светить в сеть или он internal будет?

Я бы делал на asp.net core
вот когда то делал пример https://www.cyberforum.ru/asp-... st10773933
https://blogs.msdn.microsoft.c... -core-2-x/

Persistent data просто бы хранил в бд ну или в брокере сообщений тут все зависит от вашего pipeline/flow по работе с этим.

Ну и на iis такие вещи не надо хостить это точно. Если ваш сервис будет светить в сеть то надо настроить nginx/apache
Сложностей каких-либо с реализацией я вообще не вижу.
Если хотим сделать в виде windows service тоже нету проблем с этим https://docs.microsoft.com/en-... ws-service дока правда старая
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
24.12.2017, 21:43  [ТС]
Цитата Сообщение от _exp10der_ Посмотреть сообщение
Сервис будет ли светить в сеть или он internal будет?
по идеи все на одной машине будет

Цитата Сообщение от insite2012 Посмотреть сообщение
устанавливаем на машину автозапускающуюся Windows-службу, в ее методе OnStart создаем объект службы и хост для нее и стартуем хост.
спасибо, вроде разобрался по инструкции How to: Host a WCF Service in a Managed Windows Service
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2017, 21:43
Помогаю со студенческими работами здесь

Калькулятор + авторизация WCF
ребята есть просто калькулятор подскажите как подключить авторизацию WCF-сервис должен быть сеансовым и содержать две операции...

Сокеты или WCF?
Здравствуйте. Пишется сервер и клиент. Сервер будет обрабатывать информацию и статус данных и отправлять это клиентам, клиенты будут...

WCF: определение пользователя
Доброго времени суток. Пишу проект в WPF с помощью WCF (использование БД). И задался пару вопросами: 1. Клиент авторизовался и нужно...

Не передаются данные через WCF
Не смотря, что тема связана с WCF, сомневаюсь, что нужно её в тот раздел помещать. Тут скорее всего по сериализации что-то. Есть...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru