Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В связи с таймаутом сессии веб-сервиса возник вопрос. Собственно тема. Т.е., допустим есть некая операция, которая неизвестно сколько времени займет на выполнение — может 10 минут, а может несколько часов, а то и пару дней. Допустимо ли использование веб-сервисов для "оформления" таких длительных по времени задач? Причем клиенту этого сервиса дожидаться ответа не надо. Просто запускается некая задача. Но проставляя значение таймаута веб-сервиса, мы четко лимитируем длительность выполнения запрошенной операции. Таким образом всегда будет шанс, что задача не успеет выполниться. А это мне ен нравиться. Итого более четко сформулированные вопросы: 1) Запуск из тела веб-метода отдельного потока, который взял бы на себя выполнение длительной операции, не спасает, т.к. через 20 минут он умирает. Я неправ? ОЧЕНЬ хочется верить, что мне показалось :) . Если нет, есть ли возможность обойти такое поведение созданного отдельного потока? 2) Как бы вы оформили такие длительные операции? Принимаются любые советы. Вплоть до "а брось ты этот веб-сервис...". Главное чтоб аргументировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 09:57 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: В связи с такими задачами и был придуман механизм асинхронного вызова. Для этого в web сервисе делаем методы: public Guid StartOperation(); public bool IsOperationFinished(Guid operationId); public void StopOperation(Guid operationId); В StartOperation начинаем исполнение задачи в другом потоке, регистрируем ее в своей внутренней hash-таблице, где задаче дается ключ в виде guid-а, а в качестве значения идет поток (или номер исполнителя) в котором выполняется задача. После этого возвращаем клиенту этот Guid, не дожидаясь завершения задачи. Семантика двух остальных методов очевидна. Если вам надо только запустить задачу, а контроль и возможность отмены не требуется, то решение упрощается до public void StartOperation(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 10:50 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Красин, Вы писали: К>Здравствуйте, Аноним, Вы писали: К>В связи с такими задачами и был придуман механизм асинхронного вызова. Для этого в web сервисе делаем методы: К> К>public Guid StartOperation(); К>public bool IsOperationFinished(Guid operationId); К>public void StopOperation(Guid operationId); К> К>В StartOperation начинаем исполнение задачи в другом потоке, регистрируем ее в своей внутренней hash-таблице, где задаче дается ключ в виде guid-а, а в качестве значения идет поток (или номер исполнителя) в котором выполняется задача. После этого возвращаем клиенту этот Guid, не дожидаясь завершения задачи. Семантика двух остальных методов очевидна. К>Если вам надо только запустить задачу, а контроль и возможность отмены не требуется, то решение упрощается до К> К>public void StartOperation(); К> Спасибо за ответ, но Вы, видимо, невнимательно прочитали то, что писал я: 1) Запуск из тела веб-метода отдельного потока, который взял бы на себя выполнение длительной операции, не спасает, т.к. через 20 минут он умирает. Я неправ? ОЧЕНЬ хочется верить, что мне показалось . Если нет, есть ли возможность обойти такое поведение созданного отдельного потока? Единственное уточнение. Долго выполняется не просто какой-то код веб-метода, а происходит вызов длительной хранимой процедуры, т.е. мы долго "висим" на вызове command.ExecuteNonQuery(). Причем, если я вызываю эту хранимую процедуру из "основного потока" веб-приложения (взял в кавычки, т.к. незнаю как правильно это называется) и ставлю таймаут сессии допустим 2 часа, то все ок. Но вот создаваемый поток живет только 20 минут :crash: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 11:07 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
я бы создал win-сервис, в нем синглтон а из веб-сервиса дергал этот синглтон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 11:15 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Не надо этого делать. Просто не надо. Задача и предназначение веб-сервиса - быстро дать запрашиваемую инфу и умереть. Не надо на него навешивать то, для чего он не предназначен. How can men die better than facing fearful odds, For the ashes of their fathers and the temples of their gods? | Мой Brainbench | BookReader 1.1 | Wallpaper Cycler | ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 11:41 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
По-уму если, то надо иметь веб-сервис с 3-мя методами: 1. Принять задание 2. Получить статус выполнения 3. Получить результат задания И иметь отдельный "job scheduler", который эти задания выполняет, как правило WinService. А в нем уже все реализовывать: очередь заданий, многопоточность и тыды. А "клиент", отправив задание, просто мониторит его статус через веб-сервис и ждет завершения. В противном случае можно поиметь много геморроя и с умиранием сессии, и с большим количеством клиентов (а ну как 1500 клиентов ломанутся запускать это "задание"!) Короче, не надо забивать гвозди микроскопом и использовать прочие разные предметы не по назначению. How can men die better than facing fearful odds, For the ashes of their fathers and the temples of their gods? | Мой Brainbench | BookReader 1.1 | Wallpaper Cycler | ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 11:58 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Спасибо за ответ, но Вы, видимо, невнимательно прочитали то, что писал я: Да, прошу прощения. Есть грех. А>А>1) Запуск из тела веб-метода отдельного потока, который взял бы на себя выполнение длительной операции, не спасает, т.к. через 20 минут он умирает. Я неправ? ОЧЕНЬ хочется верить, что мне показалось . Если нет, есть ли возможность обойти такое поведение созданного отдельного потока? Попробуйте в web.config прописать: <sessionState timeout="40" /> Вместо 40 минут можно поставить и больше. По умолчанию — как раз 20, видимо это и срабатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:04 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Учитывая, что долго выполняется именно сохраненная процедура, я бы сделал так: Вызываем метод сервиса, который получает параметры и сохраняет в таблицу для параметров. Создаю задание для агента сервера проверять таблицу параметров и выполнить процедуру, если есть такие. Или метод сервиса сам создает задание. Или параметры в переменной. Здесь масса вариантов. Зачем держать HTTP соединение и SQL соединение, если они не нужны? См BlackTigerAP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:04 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, IAmTonik, Вы писали: IAT>я бы создал win-сервис, в нем синглтон IAT>а из веб-сервиса дергал этот синглтон Lloyd, почему вы не согласны? Это ведь общепринятая практика: есть application server, на котором крутится вся логика и есть web сервисы, которые служат только интерфейсом между клиентом и application server-ом. Другой вопрос, что такие вещи требуют прав больших, нежели дают на чужом хостинге. Но если пишется серьезный проект, под работу которого выделяется отдельная машина, то никаких проблем в предложенном решении не вижу. Более того, считаю методически более верным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:14 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Красин, Вы писали: К>Lloyd, почему вы не согласны? Это ведь общепринятая практика: есть application server, на котором крутится вся логика и есть web сервисы, которые служат только интерфейсом между клиентом и application server-ом. Другой вопрос, что такие вещи требуют прав больших, нежели дают на чужом хостинге. Но если пишется серьезный проект, под работу которого выделяется отдельная машина, то никаких проблем в предложенном решении не вижу. Более того, считаю методически более верным. KISS. Никаких плюсов по-сравнению с просто запускам нитки нет. А раз так, то зачем платить больше (переусложнять)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:20 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Lloyd, Вы писали: L>KISS. Никаких плюсов по-сравнению с просто запускам нитки нет. А раз так, то зачем платить больше (переусложнять)? Некоторый плюс есть: мы сами контролируем время работы потока, не будет борьбы с тем, что web server работает в модели, где приложение работает конечное время. Согласен, что только этого плюса мало для того, чтобы сделать вместо одного процесса два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:25 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Красин, Вы писали: К>Некоторый плюс есть: мы сами контролируем время работы потока, не будет борьбы с тем, что web server работает в модели, где приложение работает конечное время. Согласен, что только этого плюса мало для того, чтобы сделать вместо одного процесса два. Веб-приложение работает конечное время если вы сами так настроили iis, так что аргумент не в тему. Кроме того, манера IAmTonik-а выражаться годится только для того, чтобы белокурых барышень аффектировать, а на профессиональном форуме пусть, пожалуйста, выражается внятным языком, и желательно с аргументацией. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 12:32 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: [] А>Единственное уточнение. Долго выполняется не просто какой-то код веб-метода, а происходит вызов длительной хранимой процедуры, т.е. мы долго "висим" на вызове command.ExecuteNonQuery(). Причем, если я вызываю эту хранимую процедуру из "основного потока" веб-приложения (взял в кавычки, т.к. незнаю как правильно это называется) и ставлю таймаут сессии допустим 2 часа, то все ок. Но вот создаваемый поток живет только 20 минут :crash: Так у тебя просто таймаут вызова SP. Это к вэбметоду никакого отношения не имеет. Просто увеличь таймаут вызова SP. Кроме того, SOAP поддерживает так называемые one-way вызовы. Те вызовы без получения ответа. Для оформления такого вызова нужно на метод навесить специальный атрибут — SoapDocumentMethodAttribute::OneWay(из System.Web.Services.Protocols) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 13:03 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Константин Л., Вы писали: КЛ>Так у тебя просто таймаут вызова SP. Это к вэбметоду никакого отношения не имеет. Просто увеличь таймаут вызова SP. Кроме того, SOAP поддерживает так называемые one-way вызовы. Те вызовы без получения ответа. Для оформления такого вызова нужно на метод навесить специальный атрибут — SoapDocumentMethodAttribute::OneWay(из System.Web.Services.Protocols) Спасибо за ответ. Но в конкретно моем случае это не то. С таймаутом вызова SP все в порядке. Эта же процедура (с теми же настройками команды и соединения) из-под Win-приложения выполняется нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2006, 13:50 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Если кому-то еще интересно. Проблема решается следующим образом. В IIS (по крайней мере 6-м) в свойствах пула приложений есть св-во Idle Timeout. Устанавливает время в минутах после истечения которого процесс, если он все время находился в состоянии простоя, будет уничтожен. По умолчанию стоит 20 минут. Если убрать эту функциональность или просто увеличить эту цифру, то все отрабатывает успешно. Т.е. во время выполнения ХП рабочий поток переходит в состояние Idle и, соотвтственно, умирает по истечении 20 минут. Ларчик просто открывался :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 13:45 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, BlackTigerAP, Вы писали: BTA>По-уму если, то надо иметь веб-сервис с 3-мя методами: BTA>1. Принять задание BTA>2. Получить статус выполнения BTA>3. Получить результат задания BTA>И иметь отдельный "job scheduler", который эти задания выполняет, как правило WinService. А в нем уже все реализовывать: очередь заданий, многопоточность и тыды. BTA>А "клиент", отправив задание, просто мониторит его статус через веб-сервис и ждет завершения. В противном случае можно поиметь много геморроя и с умиранием сессии, и с большим количеством клиентов (а ну как 1500 клиентов ломанутся запускать это "задание"!) BTA>Короче, не надо забивать гвозди микроскопом и использовать прочие разные предметы не по назначению. Очень интересно. Спасибо. А есть где почитать рекомендации Microsoft, к примеру, о том что является "дурным тоном". Т.е. сжато рекомендации о том где какой инструмент стоит использовать, а где — нет. В какой связке и т.д. Пример: для моей задачи использование web-сервиса неоправдано потому что... Надеюсь из этого спутанного поста Вы поймете что именно меня интересует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 13:51 |
|
||
|
Допустимо ли выполнение длительных операций в веб-сервисе?
|
|||
|---|---|---|---|
|
#18+
Ты представить себе не можешь, как бы я хотел почитать ТАКОЕ в "официальной" версии!!! :D How can men die better than facing fearful odds, For the ashes of their fathers and the temples of their gods? | Мой Brainbench | BookReader 1.1 | Wallpaper Cycler | ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 14:07 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33891226&tid=1391079]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 263ms |
| total: | 469ms |

| 0 / 0 |
