|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
Есть WCF сервис, в котором хостится три сервиса. Он работает, как ConsoleHost, Windows Service Host и под IIS. В консольном варианте запускются так Код: c# 1. 2. 3.
Хочу добавить свой сервис, он работает чисто как tcp сервис и не зависит от этих. Вопрос: Можно ли его добавить, чтобы он стартовал и останавливался так же как и существующие и под консолью, и под IIS? По аналогии типа такого Код: c# 1.
И как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 11:42 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
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, только биндинг другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 12:23 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
А какие биндинги писать, если этот сервис живет своей жизнью, не связанной с WCF ? Может есть примеры аналогичных решений? Грубо говоря, я с переделками пытаюсь всунуть серверную часть этого в свой сервис: https://github.com/sailro/Bdtunnel ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 12:53 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
Winnipuh, Т.е. это не WCF-сервис? Ну тогда, надо смотреть как настраивается и запускается тот сервис. Тут я ничего не могу сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 14:32 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
МихаилРWinnipuh, Т.е. это не WCF-сервис? Ну тогда, надо смотреть как настраивается и запускается тот сервис. Тут я ничего не могу сказать. Нет, в том-то и вопрос. Я уже прикрутил в нулевом приближении, типа такого срабатывает serviceTcpHost = new ServiceHost(typeof(TcpService)); Но вопросы есть Start, Stop: 1. windows service hosting: Мой сервис стартует один раз, я добавил в конструктор класса запуск Код: c# 1. 2. 3. 4. 5. 6.
Но не останавливается. То есть хост закрываю, но сервис где-то внутри там живет Код: c# 1.
Как бы сделать так, чтобы по закрытии хоста вызвать остановку потоков сервиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 14:50 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
Winnipuh, Откровенно говоря, я всё равно не очень понимаю, что вы хотите добиться. Вы хотите прикрутить инфраструктуру WCF к не-WCF библиотеке. Так? А какой смысл? Наверняка ведь у той библиотеки есть свои средства управления соединением, прослушкой каналов и т.д. Почему бы просто не использовать их? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 08:16 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
МихаилРWinnipuh, Откровенно говоря, я всё равно не очень понимаю, что вы хотите добиться. Вы хотите прикрутить инфраструктуру WCF к не-WCF библиотеке. Так? А какой смысл? Наверняка ведь у той библиотеки есть свои средства управления соединением, прослушкой каналов и т.д. Почему бы просто не использовать их? Я их и использую, мне нужно, чтобы старт и стоп делался как и у wcf, поскольку этот сервис хостится в консольном приложении, в win сервисе и под IIS. Скажем, еще остается вопрос, как мне стартовать мой субсервис под IIS. Кстати, я прикрутил: Я поместил в конструктор сервиса запуск прикладного потока и он стартует при таком запуске Код: c# 1.
Так же в Dispose() добавил вызов StopMyService() и он вроде бы останавливается, надо проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 12:16 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
Сделал так: 1. консольный и виндоуз хост работаеют ок 2. IIS: создал по правилам простейший сервис с одни методом, а в конструкторе он создает и запускает поток и т.д.. Все ок. Остается одна фигня: конструктор вызывается при первом вызове метода, а до того нет. Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:11 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
WinnipuhСделал так: Как-то у вас всё хитро... Ну да ладно - раз так вам удобнее, пусть так и будет. WinnipuhОстается одна фигня: конструктор вызывается при первом вызове метода, а до того нет. Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова? Так это особенность работы IIS - он создает экземпляр Application только если пришел вызов. И останавливает, когда последний не нужен. Microsoft добавляла возможность инициализировать приложение при старте IIS, но в IIS 7 делалось это через установку стороннего пакета - AppFabric (судьба которого ныне не ясна от слова "совсем". Похоже, все-таки он умер). В 7.5 делали специальный модуль , а в 8.0 это ввели в базовый функционал . Я сам никогда не использовал, поэтому рекомендаций не дам, но может вам помогут приведенные ссылки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 16:33 |
|
WCF: как добавить свой сервис?
|
|||
---|---|---|---|
#18+
МихаилРWinnipuhСделал так: Как-то у вас всё хитро... Ну да ладно - раз так вам удобнее, пусть так и будет. WinnipuhОстается одна фигня: конструктор вызывается при первом вызове метода, а до того нет. Как бы проще всего его активизировать при старте IIS, чтобы не ждал первого вызова? Так это особенность работы IIS - он создает экземпляр Application только если пришел вызов. И останавливает, когда последний не нужен. Microsoft добавляла возможность инициализировать приложение при старте IIS, но в IIS 7 делалось это через установку стороннего пакета - AppFabric (судьба которого ныне не ясна от слова "совсем". Похоже, все-таки он умер). В 7.5 делали специальный модуль , а в 8.0 это ввели в базовый функционал . Я сам никогда не использовал, поэтому рекомендаций не дам, но может вам помогут приведенные ссылки. спасибо, буду смотреть. А почему хитро? как раз наоборот, я пошел бесхитростно, сделал формально, собственно, как вы и рекомендовали выше. А уже внутри сервиса делаю свои прикладные фукции. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 20:00 |
|
|
start [/forum/topic.php?fid=19&msg=39129833&tid=1396811]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 259ms |
total: | 403ms |
0 / 0 |