Annuler les longs IFRAME en cours d'exécution

J'ai une application ASP.NET WebForm – une page principale qui héberge un tas de "widgets" IFRAME. Lorsque la page principale est chargée, les pages des widgets se chargent également et commencent leur propre traitement, ce qui inclut la connection à SQL Server pour exécuter des procédures stockées.

Quelle serait la meilleure façon d'annuler le traitement IFRAME si l'user devait le faire? Je pourrais probablement placer leur SRC à une autre page vide du côté client annulant ainsi la request, mais si les pages IFRAME déjà appelées SQL Server – comment j'annule le traitement SQL aussi?

EDIT: Pour clarifier le point le plus lent dans la page IFRAMEd est l'appel de procédure stockée SQL Server, donc essentiellement cela se résume à – puis-je initier l'annulation de la command SQL du client?

Une solution qui est venue dans mon esprit est d'avoir une List statique des SqlCommands cours d'exécution , chaque fois que l'user appelle cancel, vous pouvez extraire la command de cette list statique, puis l'annuler. La page qui exécute la command recevra l'exception d'annulation de command, elle pourra alors la gérer de manière appropriée.

Voici les choses que vous devez gérer:

  1. D'une certaine manière, l'interface user doit avoir une key, de sorte que lorsque vous appuyez sur le button annuler, l'interface user envoie cette key à la routine d'annulation, et la routine d'annulation extrait la SqlCommand utilisant cette touche et appelle sa méthode Cancel .
  2. Les appels d'annulation doivent être effectués via AJAX
  3. Un locking correct doit être effectué pour la security des filetages

Mettre à jour:

J'ajoute quelques détails ici,

  1. Voici le lien du projet http://goo.gl/noKUmj
  2. Au-dessus du projet est une application de formulaire Web
  3. Vous pouvez append autant de controllers que vous le souhaitez dans ce projet, le code de routing a déjà été ajouté dans Global.ascx , donc les nouveaux controllers devraient fonctionner
  4. Mais pour une nouvelle annulation IFRAME, vous n'avez pas besoin d'append un autre controller. Vous avez juste besoin de passer le nom de PageName (en tant que key) au controller Annuler
  5. LIMITATION : Ce projet a la limitation que si vous frappez le button d'annulation pour un IFRAME, il va annuler toutes les requests courantes, qui signifie dans un environnement multi-user, si un user annule l'IFRAME-1, tous IFRAME-1 vont être annulé pour tous les autres users.
  6. Vous pouvez annuler facilement plusieurs IFRAME, car vous pouvez voir le code du button d'annulation, il est en train d'exécuter un code JavaScript, il vous suffit d'appeler plusieurs codes d'annulation en 1 clic.

Comme vous avez déjà vu le projet, il utilise PageName comme key pour extraire le SqlCommand de List . Pour cette raison, nous avons la limitation comme je l'ai mentionné ci-dessus. Puisque PageName sera le même pour plusieurs SqlCommand .

Pour surmonter cette limitation, vous pouvez générer un GUID tant que key et transmettre ce GUID dans QuerySsortingng aux pages Form1.aspx et Form2.aspx , afin qu'ils ajoutent la command dans la List utilisant ces GUID . Ces keys doivent être générées au moment du rendu de la page hôte ou en JavaScript.

Si vous ne voulez pas faire le RnD, voici le projet mis à jour qui utilise GUID comme key. 🙂 http://goo.gl/I86S7Z