powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Выполнение задачи после ответа Response.End()
10 сообщений из 10, страница 1 из 1
Выполнение задачи после ответа Response.End()
    #40024159
LVO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVO
Гость
Или любой другой альтернативный способ.

Суть - есть сервис, который периодически вызывает мою страницу и передает данные.
И он ждет в течении 60 секунд ответ 200, если не дожидается, то отправляет данные повторно.


Обработка данных занимает существенно больше времени.

1. Я пробовал читать поток, потом Response.End() - естественно весь код моей страницы, который идет ниже, уже не выполняется.

2. Пробовал responce.end() ставить в блок try, a мой код в finaly - мой код работает а response ждет его завершения.

3. Пробовал вызывать метод обработки данных асинхронно, а затем response.end()
Это работает примерно 3-5 секунд, ответ 200 уходит, данные обрабатываются, но через 3-5 секунд ошибка "Поток находился в процессе прерывания."

И вот может кто знает, как нормально организовать обработку данных после responce?
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024162
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVO,
Исключить константу по времени обработки/ожидания.
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024170
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе нужно полностью менять подход. HTTP просто не рассчитан на то, чтобы ждать ответа 200 по минуте. По запросу от клиента следует запустить обработку данных в фоне и сразу же вернуть клиенту, например, 202 ("Accepted"). И, если это нужно, то реализовать какой-либо механизм уведомления клиента о завершении обработки (периодический опрос со стороны клиента или отправка клиенту сообщения).
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024171
LVO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVO
Гость
vb_sub,

Если это о времени ожидания стороннего сервиса в 60 секунд - то, к сожалению, никак. Это совсем стороннее ПО, которое просто раз в час шлет накопленные данные на указанный адрес.
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024172
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVO
Это совсем стороннее ПО, которое просто раз в час шлет накопленные данные на указанный адрес.

Ну так клади их куда-нибудь в очередь на обработку, а потом обрабатывай. Ты вот, допустим, приходишь на работу устраиваться - тебя ведь не заставляют сидеть в офисе на ресепшене и ждать пока твое резюме все круги ада пройдет.
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024176
LVO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVO
Гость
fkthat,

fkthatПо запросу от клиента следует запустить обработку данных в фоне и сразу же вернуть клиенту, например, 202 ("Accepted").
Вот я так и пытался сделать, запуская обработку асинхронно, и возвращая 200 сразу.
Не получилось

fkthatИ, если это нужно, то реализовать какой-либо механизм уведомления клиента о завершении обработки (периодический опрос со стороны клиента или отправка клиенту сообщения).

Вот с учетом того, что уведомлять больше никого не нужно, клиент ждет назад только ОК и всё - какой самый простой и правильный способ реализовать такую обработку?
На вход мне приходит JSON относительно небольшой, с одной HTTP ссылкой внутри, по которой я уже сам забираю данный.
Т.е., по сути, я прочитал входной поток, извлек ссылку, и смело могу отвечать ОК.

Пока в голове какие-то неуклюжие идеи, типа сохранять ссылку (в файл или базу) и шедулером обрабатывать...
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024178
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVO
Пока в голове какие-то неуклюжие идеи, типа сохранять ссылку (в файл или базу) и шедулером обрабатывать...

Как раз эта идея вовсе не "неуклюжая" а наоборот самая правильная.
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024218
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVO
Вот я так и пытался сделать, запуская обработку асинхронно, и возвращая 200 сразу.
Не получилось


Что не получилось?
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024273
LVO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LVO
Гость
hVostt,

Вообще вот удивительно, но уже получилось.

У меня асинхронный метод был заключен в try-catch. B Catch ошибку "Поток находился в процессе прерывания."

Сейчас я совсем убрал try-catch - и все обрабатывается нормально.
Т.е. мой сервис вызывается, я вызываю асинхронный метод, и сразу возвращаю respone.end()
При этом асинхронный метод 10 минут еще работает, обрабатывая данные, и выполняя полезную работу (о чем пишет информацию в файлики)

Одна беда, без try-catch очень неуютно.
...
Рейтинг: 0 / 0
Выполнение задачи после ответа Response.End()
    #40024276
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVO
Т.е. мой сервис вызывается, я вызываю асинхронный метод, и сразу возвращаю respone.end()

Я что-то не догоняю - а зачем тебе вообще там response.end() нужен?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Выполнение задачи после ответа Response.End()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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