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:
SqlCommand
utilisant cette touche et appelle sa méthode Cancel
. Mettre à jour:
J'ajoute quelques détails ici,
Global.ascx
, donc les nouveaux controllers devraient fonctionner PageName
(en tant que key) au controller Annuler 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