powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Допустимо ли выполнение длительных операций в веб-сервисе?
17 сообщений из 17, страница 1 из 1
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33890956
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
В связи с таймаутом сессии веб-сервиса возник вопрос. Собственно тема. Т.е., допустим есть некая операция, которая неизвестно сколько времени займет на выполнение — может 10 минут, а может несколько часов, а то и пару дней. Допустимо ли использование веб-сервисов для "оформления" таких длительных по времени задач? Причем клиенту этого сервиса дожидаться ответа не надо. Просто запускается некая задача. Но проставляя значение таймаута веб-сервиса, мы четко лимитируем длительность выполнения запрошенной операции. Таким образом всегда будет шанс, что задача не успеет выполниться. А это мне ен нравиться.

Итого более четко сформулированные вопросы:
1) Запуск из тела веб-метода отдельного потока, который взял бы на себя выполнение длительной операции, не спасает, т.к. через 20 минут он умирает. Я неправ? ОЧЕНЬ хочется верить, что мне показалось :) . Если нет, есть ли возможность обойти такое поведение созданного отдельного потока?
2) Как бы вы оформили такие длительные операции? Принимаются любые советы. Вплоть до "а брось ты этот веб-сервис...". Главное чтоб аргументировано
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891138
Красин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Аноним, Вы писали:

В связи с такими задачами и был придуман механизм асинхронного вызова. Для этого в web сервисе делаем методы:

public Guid StartOperation();
public bool IsOperationFinished(Guid operationId);
public void StopOperation(Guid operationId);
В StartOperation начинаем исполнение задачи в другом потоке, регистрируем ее в своей внутренней hash-таблице, где задаче дается ключ в виде guid-а, а в качестве значения идет поток (или номер исполнителя) в котором выполняется задача. После этого возвращаем клиенту этот Guid, не дожидаясь завершения задачи. Семантика двух остальных методов очевидна.

Если вам надо только запустить задачу, а контроль и возможность отмены не требуется, то решение упрощается до

public void StartOperation();
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891198
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, Красин, Вы писали:

К>Здравствуйте, Аноним, Вы писали:

К>В связи с такими задачами и был придуман механизм асинхронного вызова. Для этого в 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:
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891226
IAmTonik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы создал win-сервис, в нем синглтон
а из веб-сервиса дергал этот синглтон
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891336
BlackTigerAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо этого делать. Просто не надо.

Задача и предназначение веб-сервиса - быстро дать запрашиваемую инфу и умереть. Не надо на него навешивать то, для чего он не предназначен. 
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 |
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891405
BlackTigerAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-уму если, то надо иметь веб-сервис с 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 |
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891433
Красин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Аноним, Вы писали:

А>Спасибо за ответ, но Вы, видимо, невнимательно прочитали то, что писал я:

Да, прошу прощения. Есть грех.

А>А>1) Запуск из тела веб-метода отдельного потока, который взял бы на себя выполнение длительной операции, не спасает, т.к. через 20 минут он умирает. Я неправ? ОЧЕНЬ хочется верить, что мне показалось . Если нет, есть ли возможность обойти такое поведение созданного отдельного потока?
Попробуйте в web.config прописать:

<sessionState
  timeout="40"
/>
Вместо 40 минут можно поставить и больше. По умолчанию — как раз 20, видимо это и срабатывает.
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891434
mclabman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Учитывая, что долго выполняется именно сохраненная процедура, я бы сделал так:
Вызываем метод сервиса, который получает параметры и сохраняет в таблицу для параметров.
Создаю задание для агента сервера проверять таблицу параметров и выполнить процедуру, если есть такие.
Или метод сервиса сам создает задание. Или параметры в переменной. Здесь масса вариантов.

Зачем держать HTTP соединение и SQL соединение, если они не нужны?

См BlackTigerAP 
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891471
Красин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, IAmTonik, Вы писали:

IAT>я бы создал win-сервис, в нем синглтон
IAT>а из веб-сервиса дергал этот синглтон

Lloyd, почему вы не согласны? Это ведь общепринятая практика: есть application server, на котором крутится вся логика и есть web сервисы, которые служат только интерфейсом между клиентом и application server-ом. Другой вопрос, что такие вещи требуют прав больших, нежели дают на чужом хостинге. Но если пишется серьезный проект, под работу которого выделяется отдельная машина, то никаких проблем в предложенном решении не вижу. Более того, считаю методически более верным.
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891502
Lloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Красин, Вы писали:

К>Lloyd, почему вы не согласны? Это ведь общепринятая практика: есть application server, на котором крутится вся логика и есть web сервисы, которые служат только интерфейсом между клиентом и application server-ом. Другой вопрос, что такие вещи требуют прав больших, нежели дают на чужом хостинге. Но если пишется серьезный проект, под работу которого выделяется отдельная машина, то никаких проблем в предложенном решении не вижу. Более того, считаю методически более верным.

KISS. Никаких плюсов по-сравнению с просто запускам нитки нет. А раз так, то зачем платить больше (переусложнять)?
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891520
Красин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Lloyd, Вы писали:

L>KISS. Никаких плюсов по-сравнению с просто запускам нитки нет. А раз так, то зачем платить больше (переусложнять)?

Некоторый плюс есть: мы сами контролируем время работы потока, не будет борьбы с тем, что web server работает в модели, где приложение работает конечное время. Согласен, что только этого плюса мало для того, чтобы сделать вместо одного процесса два.
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891539
Lloyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Красин, Вы писали:

К>Некоторый плюс есть: мы сами контролируем время работы потока, не будет борьбы с тем, что web server работает в модели, где приложение работает конечное время. Согласен, что только этого плюса мало для того, чтобы сделать вместо одного процесса два.

Веб-приложение работает конечное время если вы сами так настроили iis, так что аргумент не в тему. Кроме того, манера IAmTonik-а выражаться годится только для того, чтобы белокурых барышень аффектировать, а на профессиональном форуме пусть, пожалуйста, выражается внятным языком, и желательно с аргументацией. ;)
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891647
Здравствуйте, Аноним, Вы писали:

[]

А>Единственное уточнение. Долго выполняется не просто какой-то код веб-метода, а происходит вызов длительной хранимой процедуры, т.е. мы долго "висим" на вызове command.ExecuteNonQuery(). Причем, если я вызываю эту хранимую процедуру из "основного потока" веб-приложения (взял в кавычки, т.к. незнаю как правильно это называется) и ставлю таймаут сессии допустим 2 часа, то все ок. Но вот создаваемый поток живет только 20 минут :crash:

Так у тебя просто таймаут вызова SP. Это к вэбметоду никакого отношения не имеет. Просто увеличь таймаут вызова SP. Кроме того, SOAP поддерживает так называемые one-way вызовы. Те вызовы без получения ответа. Для оформления такого вызова нужно на метод навесить специальный атрибут — SoapDocumentMethodAttribute::OneWay(из System.Web.Services.Protocols)
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33891843
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, Константин Л., Вы писали:

КЛ>Так у тебя просто таймаут вызова SP. Это к вэбметоду никакого отношения не имеет. Просто увеличь таймаут вызова SP. Кроме того, SOAP поддерживает так называемые one-way вызовы. Те вызовы без получения ответа. Для оформления такого вызова нужно на метод навесить специальный атрибут — SoapDocumentMethodAttribute::OneWay(из System.Web.Services.Protocols)

Спасибо за ответ. Но в конкретно моем случае это не то. С таймаутом вызова SP все в порядке. Эта же процедура (с теми же настройками команды и соединения) из-под Win-приложения выполняется нормально
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33894562
darling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому-то еще интересно. Проблема решается следующим образом. В IIS (по крайней мере 6-м) в свойствах пула приложений есть св-во Idle Timeout. Устанавливает время в минутах после истечения которого процесс, если он все время находился в состоянии простоя, будет уничтожен. По умолчанию стоит 20 минут. Если убрать эту функциональность или просто увеличить эту цифру, то все отрабатывает успешно. Т.е. во время выполнения ХП рабочий поток переходит в состояние Idle и, соотвтственно, умирает по истечении 20 минут.
Ларчик просто открывался :)
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33894585
darling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, BlackTigerAP, Вы писали:

BTA>По-уму если, то надо иметь веб-сервис с 3-мя методами:
BTA>1. Принять задание
BTA>2. Получить статус выполнения
BTA>3. Получить результат задания

BTA>И иметь отдельный "job scheduler", который эти задания выполняет, как правило WinService. А в нем уже все реализовывать: очередь заданий, многопоточность и тыды.

BTA>А "клиент", отправив задание, просто мониторит его статус через веб-сервис и ждет завершения. В противном случае можно поиметь много геморроя и с умиранием сессии, и с большим количеством клиентов (а ну как 1500 клиентов ломанутся запускать это "задание"!)

BTA>Короче, не надо забивать гвозди микроскопом и использовать прочие разные предметы не по назначению.

Очень интересно. Спасибо. А есть где почитать рекомендации Microsoft, к примеру, о том что является "дурным тоном". Т.е. сжато рекомендации о том где какой инструмент стоит использовать, а где — нет. В какой связке и т.д. Пример: для моей задачи использование web-сервиса неоправдано потому что... Надеюсь из этого спутанного поста Вы поймете что именно меня интересует
...
Рейтинг: 0 / 0
Допустимо ли выполнение длительных операций в веб-сервисе?
    #33894640
BlackTigerAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты представить себе не можешь, как бы я хотел почитать ТАКОЕ в "официальной" версии!!! :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 |
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Допустимо ли выполнение длительных операций в веб-сервисе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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