|
Удаление экземпляра WCF сервиса в режиме PerCall
|
|||
---|---|---|---|
#18+
Всем добрый день. Есть WCF сервис с поведением InstanceContextMode = InstanceContextMode.Percall, причём методы сервиса часто выполняются достаточно долго по объективным причинам. Иногда нужно остановить какой-то экземпляр сервиса. Есть ли возможность идентификации и удаления отдельных экземпляров сервиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2013, 12:14 |
|
Удаление экземпляра WCF сервиса в режиме PerCall
|
|||
---|---|---|---|
#18+
JovannyВсем добрый день. Есть WCF сервис с поведением InstanceContextMode = InstanceContextMode.Percall, причём методы сервиса часто выполняются достаточно долго по объективным причинам. Иногда нужно остановить какой-то экземпляр сервиса. Есть ли возможность идентификации и удаления отдельных экземпляров сервиса? с клиента? или обзервер, который будет их убивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2013, 12:12 |
|
Удаление экземпляра WCF сервиса в режиме PerCall
|
|||
---|---|---|---|
#18+
Вариантов решения этой задачи много, но имхо самый надежный - через БД. Создаете таблицу примерно с такой структурой: Код: sql 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.
Когда сервис стартовал, генерите в нем гуид и инсертите запись в таблицу. Время от времени(например по таймеру) сервис мониторит таблицу, делает в ней записи о своем состоянии и считывает поле - KillFlow, если true - сам себя убивает. С какого-то клиента мониторите эту таблицу и видите что у Вас происходит. Если нужно убить сервис ставите KillFlow в true. Можно обойтись и без БД, например создать еще один сервис с колекцией объектов аналогичной структуры как в приведенной таблице, и повесить этот сервис как сингл, другие сервисы будут обращаться к этому синглу и делать аналогичные операци. Но здесь есть одна проблема, синглы имеют неприятную особенность временами падать, особенно если система висит на общественном хостинге, например рестартонул IIS, в этом случае хрен знает в каком состоянии все умерло. Вообще если у Вас длительные процессы, то рекомендую посмотреть в сторону Work Flow + WCF, там вышеприведенные механизмы(сохранение состояния в БД) уже реализованы по дефолту. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 08:46 |
|
Удаление экземпляра WCF сервиса в режиме PerCall
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIВариантов решения этой задачи много, но имхо самый надежный - через БД. Создаете таблицу примерно с такой структурой: Код: sql 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.
Когда сервис стартовал, генерите в нем гуид и инсертите запись в таблицу. Время от времени(например по таймеру) сервис мониторит таблицу, делает в ней записи о своем состоянии и считывает поле - KillFlow, если true - сам себя убивает. С какого-то клиента мониторите эту таблицу и видите что у Вас происходит. Если нужно убить сервис ставите KillFlow в true. Можно обойтись и без БД, например создать еще один сервис с колекцией объектов аналогичной структуры как в приведенной таблице, и повесить этот сервис как сингл, другие сервисы будут обращаться к этому синглу и делать аналогичные операци. Но здесь есть одна проблема, синглы имеют неприятную особенность временами падать, особенно если система висит на общественном хостинге, например рестартонул IIS, в этом случае хрен знает в каком состоянии все умерло. Вообще если у Вас длительные процессы, то рекомендую посмотреть в сторону Work Flow + WCF, там вышеприведенные механизмы(сохранение состояния в БД) уже реализованы по дефолту. как сервис себя убьет? В логику некий флаг вставлять do while ( ) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 12:38 |
|
Удаление экземпляра WCF сервиса в режиме PerCall
|
|||
---|---|---|---|
#18+
netivanкак сервис себя убьет? В логику некий флаг вставлять do while ( ) ? Ну я хз как у ТС сервис реализован и что он делает, но в общем случае нужно выполнение метода завершить через return, как это сделать это уже дело конкретной реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 12:52 |
|
|
start [/forum/topic.php?fid=19&msg=38407067&tid=1397037]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 402ms |
0 / 0 |