Отменить длительные рамки

У меня есть приложение ASP.NET WebForm - главная страница, на которой размещено множество виджетов IFRAME. Когда загружается главная страница - страницы виджетов также загружаются и начинают свою собственную обработку, которая включает подключение к SQL Server для запуска хранимых процедур.

Каков наилучший способ отменить обработку IFRAME, если это потребуется пользователю? Я мог бы, вероятно, установить для их SRC другую / пустую страницу со стороны клиента, отменив запрос, но если страницы IFRAME уже называются SQL Server - как мне отменить обработку SQL?

РЕДАКТИРОВАТЬ: Чтобы уточнить самый медленный момент на странице IFRAMEd является вызов хранимой процедуры SQL Server, так что по сути это сводится к - я могу инициировать отмену команды SQL от клиента?

1 ответ

Решение

Одно из решений, которое мне пришло в голову, - это иметь статический List в настоящее время работает SqlCommands всякий раз, когда пользователь вызывает отмену, вы можете извлечь команду из этого статического списка, а затем отменить ее. Страница, которая выполняет команду, получит исключение команды отмены, затем она может обработать ее соответствующим образом.

Вот вещи, с которыми вам нужно справиться:

  1. Каким-то образом в пользовательском интерфейсе должна быть какая-то клавиша, чтобы при нажатии кнопки отмены пользовательский интерфейс отправлял эту клавишу в процедуру отмены, а процедура отмены извлекала бы SqlCommand используя этот ключ и вызвать его Cancel метод.
  2. Отмена звонков должна быть сделана через AJAX
  3. Надлежащая блокировка должна быть сделана для безопасности потока

Обновить:

Я добавляю некоторые детали здесь,

  1. Вот ссылка на проект http://goo.gl/noKUmj
  2. Над проектом находится приложение веб-формы
  3. Вы можете добавить столько контроллеров, сколько хотите в этом проекте, код маршрутизации уже был добавлен в Global.ascx поэтому новые контроллеры должны работать
  4. Но для новой отмены IFRAME вам не нужно добавлять другой контроллер. Вам просто нужно передать PageName (как ключ) к контроллеру отмены
  5. ОГРАНИЧЕНИЕ: у этого проекта есть ограничение: если вы нажмете кнопку отмены для IFRAME, он отменит все текущие запросы, что означает, что в многопользовательской среде, если один пользователь отменяет IFRAME-1, все IFRAME-1 будут работать быть отмененным для любого другого пользователя.
  6. Вы можете легко отменить несколько 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

Другие вопросы по тегам