powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: как добавить свой сервис?
10 сообщений из 10, страница 1 из 1
WCF: как добавить свой сервис?
    #39129542
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть WCF сервис, в котором хостится три сервиса.
Он работает, как ConsoleHost, Windows Service Host и под IIS.

В консольном варианте запускются так

Код: c#
1.
2.
3.
serviceHostCross = new ServiceHost(typeof(CrossService));
serviceHostRest = new WebServiceHost(typeof(DataRESTService));
serviceTransferHost = new ServiceHost(typeof(TransferService));



Хочу добавить свой сервис, он работает чисто как tcp сервис и не зависит от этих.
Вопрос:
Можно ли его добавить, чтобы он стартовал и останавливался так же как и существующие и под консолью, и под IIS?

По аналогии типа такого
Код: c#
1.
serviceTcpHost = new ServiceHost(typeof(TcpService));



И как это сделать?
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39129613
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhМожно ли его добавить, чтобы он стартовал и останавливался так же как и существующие и под консолью, и под IIS?
Конечно.

WinnipuhИ как это сделать?
Точно так же, как и для дргих сервисов. Отличаться он будет только настройками биндингов.
Т.е. вам нужно, создать ваш сервис а затем...
1. Для Self-hosting:
- прописать ему биндинги в app.config (или сделать настройку в коде - смотря как вы делаете), и запустить через ServiceHost (как вы и написали)
2. Для IIS:
- убедиться, что установлены такие компоненты Windows как TCP Activation и TCP Port Sharing (в клиентской Windows это делается в компоненте Turn Windows features on or off)
- прописать в IIS manager для того сайта, на котором будете хостить сервисы, TCP-биндинг с нужными настройками (обычно Default Site уже всё прописано, можно взять его за образец)
- создать обычны .svc файл для сервиса
- в web.config указать, что у вас для сервиса используется TCP биндинг

Т.е. всё как и для сервисов под HTTP, только биндинг другой.
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39129643
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какие биндинги писать, если этот сервис живет своей жизнью, не связанной с WCF ?
Может есть примеры аналогичных решений?

Грубо говоря, я с переделками пытаюсь всунуть серверную часть этого в свой сервис:
https://github.com/sailro/Bdtunnel
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39129807
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Т.е. это не WCF-сервис?
Ну тогда, надо смотреть как настраивается и запускается тот сервис. Тут я ничего не могу сказать.
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39129833
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРWinnipuh,

Т.е. это не WCF-сервис?
Ну тогда, надо смотреть как настраивается и запускается тот сервис. Тут я ничего не могу сказать.

Нет, в том-то и вопрос.

Я уже прикрутил в нулевом приближении, типа такого срабатывает

serviceTcpHost = new ServiceHost(typeof(TcpService));

Но вопросы есть Start, Stop:

1. windows service hosting:

Мой сервис стартует один раз, я добавил в конструктор класса запуск

Код: c#
1.
2.
3.
4.
5.
6.
 serviceHost = new ServiceHost(typeof(MyService));

                    if (serviceHost != null)
                    {
                        serviceHost.Open();
                    }

Но не останавливается.


То есть хост закрываю, но сервис где-то внутри там живет
Код: c#
1.
if (serviceHostl != null && serviceHost.State != CommunicationState.Closed) serviceHost.Close();



Как бы сделать так, чтобы по закрытии хоста вызвать остановку потоков сервиса?
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39130406
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Откровенно говоря, я всё равно не очень понимаю, что вы хотите добиться.
Вы хотите прикрутить инфраструктуру WCF к не-WCF библиотеке. Так?

А какой смысл? Наверняка ведь у той библиотеки есть свои средства управления соединением, прослушкой каналов и т.д. Почему бы просто не использовать их?
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39130648
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРWinnipuh,

Откровенно говоря, я всё равно не очень понимаю, что вы хотите добиться.
Вы хотите прикрутить инфраструктуру WCF к не-WCF библиотеке. Так?

А какой смысл? Наверняка ведь у той библиотеки есть свои средства управления соединением, прослушкой каналов и т.д. Почему бы просто не использовать их?

Я их и использую, мне нужно, чтобы старт и стоп делался как и у wcf, поскольку этот сервис хостится в консольном приложении, в win сервисе и под IIS.
Скажем, еще остается вопрос, как мне стартовать мой субсервис под IIS.

Кстати, я прикрутил:

Я поместил в конструктор сервиса запуск прикладного потока и он стартует при таком запуске
Код: c#
1.
serviceTcpHost = new ServiceHost(typeof(TcpService));



Так же в Dispose() добавил вызов StopMyService() и он вроде бы останавливается, надо проверять.
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39130892
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так:
1. консольный и виндоуз хост работаеют ок
2. IIS: создал по правилам простейший сервис с одни методом, а в конструкторе он создает и запускает поток и т.д..
Все ок.

Остается одна фигня: конструктор вызывается при первом вызове метода, а до того нет.
Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова?
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39131010
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhСделал так:
Как-то у вас всё хитро...
Ну да ладно - раз так вам удобнее, пусть так и будет.

WinnipuhОстается одна фигня: конструктор вызывается при первом вызове метода, а до того нет.
Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова?
Так это особенность работы IIS - он создает экземпляр Application только если пришел вызов. И останавливает, когда последний не нужен.

Microsoft добавляла возможность инициализировать приложение при старте IIS, но в IIS 7 делалось это через установку стороннего пакета - AppFabric (судьба которого ныне не ясна от слова "совсем". Похоже, все-таки он умер).
В 7.5 делали специальный модуль , а в 8.0 это ввели в базовый функционал .
Я сам никогда не использовал, поэтому рекомендаций не дам, но может вам помогут приведенные ссылки.
...
Рейтинг: 0 / 0
WCF: как добавить свой сервис?
    #39131264
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРWinnipuhСделал так:
Как-то у вас всё хитро...
Ну да ладно - раз так вам удобнее, пусть так и будет.

WinnipuhОстается одна фигня: конструктор вызывается при первом вызове метода, а до того нет.
Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова?
Так это особенность работы IIS - он создает экземпляр Application только если пришел вызов. И останавливает, когда последний не нужен.

Microsoft добавляла возможность инициализировать приложение при старте IIS, но в IIS 7 делалось это через установку стороннего пакета - AppFabric (судьба которого ныне не ясна от слова "совсем". Похоже, все-таки он умер).
В 7.5 делали специальный модуль , а в 8.0 это ввели в базовый функционал .
Я сам никогда не использовал, поэтому рекомендаций не дам, но может вам помогут приведенные ссылки.

спасибо, буду смотреть.

А почему хитро? как раз наоборот, я пошел бесхитростно, сделал формально, собственно, как вы и рекомендовали выше.
А уже внутри сервиса делаю свои прикладные фукции.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: как добавить свой сервис?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]