Отменить длительные рамки
У меня есть приложение ASP.NET WebForm - главная страница, на которой размещено множество виджетов IFRAME. Когда загружается главная страница - страницы виджетов также загружаются и начинают свою собственную обработку, которая включает подключение к SQL Server для запуска хранимых процедур.
Каков наилучший способ отменить обработку IFRAME, если это потребуется пользователю? Я мог бы, вероятно, установить для их SRC другую / пустую страницу со стороны клиента, отменив запрос, но если страницы IFRAME уже называются SQL Server - как мне отменить обработку SQL?
РЕДАКТИРОВАТЬ: Чтобы уточнить самый медленный момент на странице IFRAMEd является вызов хранимой процедуры SQL Server, так что по сути это сводится к - я могу инициировать отмену команды SQL от клиента?
1 ответ
Одно из решений, которое мне пришло в голову, - это иметь статический List
в настоящее время работает SqlCommands
всякий раз, когда пользователь вызывает отмену, вы можете извлечь команду из этого статического списка, а затем отменить ее. Страница, которая выполняет команду, получит исключение команды отмены, затем она может обработать ее соответствующим образом.
Вот вещи, с которыми вам нужно справиться:
- Каким-то образом в пользовательском интерфейсе должна быть какая-то клавиша, чтобы при нажатии кнопки отмены пользовательский интерфейс отправлял эту клавишу в процедуру отмены, а процедура отмены извлекала бы
SqlCommand
используя этот ключ и вызвать егоCancel
метод. - Отмена звонков должна быть сделана через AJAX
- Надлежащая блокировка должна быть сделана для безопасности потока
Обновить:
Я добавляю некоторые детали здесь,
- Вот ссылка на проект http://goo.gl/noKUmj
- Над проектом находится приложение веб-формы
- Вы можете добавить столько контроллеров, сколько хотите в этом проекте, код маршрутизации уже был добавлен в
Global.ascx
поэтому новые контроллеры должны работать - Но для новой отмены IFRAME вам не нужно добавлять другой контроллер. Вам просто нужно передать
PageName
(как ключ) к контроллеру отмены - ОГРАНИЧЕНИЕ: у этого проекта есть ограничение: если вы нажмете кнопку отмены для IFRAME, он отменит все текущие запросы, что означает, что в многопользовательской среде, если один пользователь отменяет IFRAME-1, все IFRAME-1 будут работать быть отмененным для любого другого пользователя.
- Вы можете легко отменить несколько IFRAME, так как вы видите код кнопки отмены, где выполняется код JavaScript, вам просто нужно вызвать несколько кодов отмены в 1 клик.
Как вы, возможно, уже видели проект, он использует PageName
в качестве ключа для извлечения SqlCommand
от List
, Из-за этого у нас есть ограничение, как я уже упоминал выше. поскольку PageName
будет одинаковым для нескольких SqlCommand
s.
Чтобы преодолеть это ограничение, вы можете сгенерировать GUID
в качестве ключа и передать это GUID
в QueryString
в Form1.aspx
а также Form2.aspx
страницы, чтобы они добавили команду в List
используя эти GUID
s. Эти ключи должны быть сгенерированы во время рендеринга главной страницы или в JavaScript.
Если вы не хотите делать RnD, вот обновленный проект, который использует GUID
в качестве ключа.:) http://goo.gl/I86S7Z