Сохраненный процесс и программа все еще работают, даже если браузер закрыт? - PullRequest
2 голосов
/ 20 августа 2009

У меня есть страница .NET, которая будет выполнять вычисления, вызывая сохраненный процесс в SQL Server, когда пользователь нажимает кнопку. Как правило, вычисление занимает около 2 минут, и после завершения оно обновит поле в таблице. Теперь у меня есть проблема, что, когда пользователь случайно закрывает браузер, сохраненный процесс все еще будет работать и обновлять таблицу. Я думал, что страница должна перестать работать, перестать обновлять поле в таблице, а не продолжать работать, даже если браузер был закрыт ?? Есть идеи как остановить процесс ??

Ответы [ 4 ]

3 голосов
/ 20 августа 2009

Когда запрос страницы приводит к вызову в базу данных, страница будет ждать его завершения, но база данных не будет знать какой-либо из страниц этой страницы. Так что, если страница перестанет ждать по какой-либо причине, база данных с радостью продолжит работать до конца. На самом деле, запрос страницы также не имеет никакой информации о том, открыт ли браузер или нет, поэтому, если пользователь закрывает браузер, сам запрос страницы все равно будет выполняться до завершения. Только то, что никто не будет слушать результат.

3 голосов
/ 20 августа 2009

номер

Сервер ничего не знает о том, открыт ли браузер. Браузер просто запускает процесс, и к моменту загрузки страницы его взаимодействие с сервером завершается.

1 голос
/ 20 августа 2009

Вы можете использовать ajax-вызов по таймеру, чтобы сервер мог определить, открыт ли браузер и активен ли он.

Чтобы остановить хранимую процедуру, когда это произойдет, вам нужно будет внести в нее некоторые серьезные изменения. Единственный реальный способ - сохранить параметр в базе данных, чтобы указать, что хранимая процедура должна продолжить работу, а затем проверить этот параметр в течение всего хранимого процесса. Если браузер закрыт, вы затем обновите этот параметр, и вы можете изменить свою хранимую процедуру на откат / выход на основе этого значения.

Однако все это довольно сложно для очень небольшого усиления ... Является ли проблемой то, что хранимая процедура продолжает работать?

0 голосов
/ 20 августа 2009

Если вам нужно для этого отменить некоторую форму отмены, вам нужно будет внести ряд изменений в свою страницу asp.net и в свои расчеты. Ваш расчет должен искать флаг (возможно, в той же таблице, где он сохранил результат).

Затем в вашем коде вам нужно асинхронно завершить выполнение процедуры. Теперь, чтобы сделать все чисто, вам действительно нужна вся страница для асинхронной обработки и периодического пробуждения, проверьте Request.IsClientConnected и, если они больше не подключены, установите флаг для отмены вычисления.

Это большая часть работы, и легко ошибиться. Кроме того, ваша стратегия для реализации этого будет сильно отличаться в зависимости от того, должно ли ваше приложение поддерживать 10 пользователей или тысячи (вы спите в пуле потоков .Net и таким образом ограничивает масштабируемость вашего приложения, или у вас есть выделенный поток для опроса IsClientConnected собственности, и решить, какой расчет прервать?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...