J'ai une application qui permet à l'utilisateur de télécharger un fichier Excel contenant des milliers de données, puis dans le code de la méthode d'action du contrôleur chaque ligne et importer dans le système.SignalR Comment arrêter l'exécution du code d'action du contrôleur lorsque Disconnected() est appelé
J'utilise le signalR parce que je veux afficher le pourcentage du processus en temps réel à l'utilisateur.
Cependant, je veux également la possibilité d'arrêter l'exécution du code si l'utilisateur appuie sur le bouton STOP.
Javascript: Je déclare du client
$.connection.hub.stop() // this javascript is called from client
C#: cette méthode est appelée dans le code du serveur
// then this action will be called
public override Task OnDisconnected(bool stopCalled)
{
// what should i put here??
return base.OnDisconnected(stopCalled);
}
Cela arrêtera la connexion mais il ne s'arrête pas le code d'action du contrôleur de continuer à exécuter pour les prochaines 5-10 minutes ou plus et c'est un gaspillage de ressources.
Le code ci-dessous ne fonctionne pas car lorsque Hub est déconnecté Response.IsClientConnected est toujours vrai et la boucle continue de s'exécuter.
// controller action method code:
for (int i = 0; i < rows.Count; i++)
{
if (!Response.IsClientConnected) // this is true even when disconnected, however this code will work if the user completely exits the browser tab.
{
Response.End();
}
// process this row
}
vous ne devriez pas arrêter la connexion (en appelant stop()) sur le moyeu, le rat elle vous devriez créer une méthode qui peut être appelée du côté client qui arrête tout ce que le serveur fait .. (CLIENT-> SERVEUR) – DOMZE
@DOMZE merci pour votre commentaire mais aucune justification quant à pourquoi je ne devrais pas utiliser $ .connection .hub.stop()? il semble faire ce que je voulais, c'est arrêter la connexion. Maintenant, tout ce dont j'ai besoin est un moyen pour le serveur de vérifier que la connexion au client est toujours en vie ou pas, sinon elle stopperait l'exécution du code. – andyh0316
En supposant que vous commenciez à utiliser SignalR pour d'autres choses, cela arrêtera toutes les connexions. Donc, en supposant que vous avez un système de notification à l'écoute, ce sera également arrêté – DOMZE