|
Как грамотно завершить работу self hosted wcf службы?
|
|||
---|---|---|---|
#18+
Допустим есть wcf служба, которая хостится в win service. Если пользователь решит вырубить сервис, то как мне грамотно завершить работу wcf службы? Допустим, один юзер вызвал метод по перемещению файлов, другой юзер что-то делает с базой. Если без логики завершить работу Win Service, то это приведет к необратимым последствиям. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 00:53 |
|
Как грамотно завершить работу self hosted wcf службы?
|
|||
---|---|---|---|
#18+
iluxa1810Допустим есть wcf служба, которая хостится в win service. Если пользователь решит вырубить сервис, то как мне грамотно завершить работу wcf службы? Допустим, один юзер вызвал метод по перемещению файлов, другой юзер что-то делает с базой. Если без логики завершить работу Win Service, то это приведет к необратимым последствиям. все зависит от вашей логики, транзакция в базу откатится, копирование файлов будет оборвано, так тоже бывает. А если хотите дать завершиться операциям (если они завершатся(!)), делайте какие-то флаги и не давайте "вырубить" сервис злому юзеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 13:45 |
|
Как грамотно завершить работу self hosted wcf службы?
|
|||
---|---|---|---|
#18+
Ролг Хупин, А как мне сообщить WCF, что хост завершается и нужно проделать некоторые действия? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 19:42 |
|
Как грамотно завершить работу self hosted wcf службы?
|
|||
---|---|---|---|
#18+
iluxa1810, Не очень понял, сути проблемы. Если вы вызываете у WCF хоста (который ServiceHost) метод Close() , то у вас происходит следующее: - запрещаются новые подключения - ожидается завершается всех запущенных ранее запросов, а также тех, которые стоят в очереди на выполнение (завершится они могут как потому, что отработают, так и потому, что истек таймаут. Метод Close(), как понятно - это блокирующий метод. Вы можете управлять этим процессом, а именно: - Указать таймаут на ожидание - Использовать асинхронную версию BeginClose() Собственно, для Windows Service наилучшая стратегия - использовать BeginClose(), и пока не закончится закрытие, периодически продлевать время остановки самого сервиса, вызывая RequestAdditionalTime() ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2016, 12:08 |
|
|
start [/forum/topic.php?fid=19&fpage=4&tid=1396782]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 283ms |
total: | 429ms |
0 / 0 |