2012-04-08 5 views
1

Ich habe eine Anforderung, jeden Benutzer zu informieren, um ihre Arbeit zu speichern und sich abzumelden, so dass der Admin iis zurücksetzen oder einige Änderungen in der asp.net MVC-Anwendungsserver vornehmen kann.BroadCast Admin Nachricht an jede Sitzung Benutzer

Durchschleifen Sitzung Objekt Sammlung ist nicht thread sicher das ist, was ich gelernt habe.

andere Ideen?

und selbst wenn ich aktive Sitzungen bekommen kann, wie sende ich eine Nachricht an diese Kunden?

danke im voraus.

Antwort

1

Speichern Sie die Nachricht in einer Datenbank und fragen Sie die Datenbank nach jeder Anfrage ab, um festzustellen, ob eine Nachricht existiert.

+0

Ich mache das schon bei jeder Anfrage. Aber ich hoffe, diese Antwort vom Server selbst zu initiieren, nicht nach irgendeiner Benutzeranfrage. – Deb

+1

Dann müssen Sie die Nachricht an den Client senden, was eine neue Anforderung ist. Sie können dies tun, indem Sie eine AJAX-Abfrage für eine Aktion auf dem Server verwenden. Die Serveraktion kann dann die Datenbank abfragen. – usr

0

Dies scheint wie eine schlecht definierte Anforderung.

Eine ernsthafte Wartung sollte zu einem bestimmten Zeitpunkt durchgeführt werden, und Benutzer sollten rechtzeitig auf dieses Zeitfenster hingewiesen werden.

Einfaches Neustarten von IIS ist ein ziemlich schneller Vorgang ... Gibt es einen Grund, warum Benutzer ihre Arbeit verlieren, wenn sie IIS einfach neu starten? Während ich diese StackOverflow-Antwort zum Beispiel ausgefüllt habe, könnten sie den Server ein Dutzend Mal neu gestartet haben. Sobald ich auf "Post" klicke, wird der Server entweder heruntergefahren und verlässt meine Arbeit im Textfeld, sonst wird die Verbindung erfolgreich hergestellt, wenn der Server wieder in der Zeit ist.

Wenn ich keine Daten einreiche, sondern nur auf einen Link klicke, gilt dasselbe: Entweder bricht der Browser ab, in diesem Fall reicht eine einfache Aktualisierung aus, wenn der Server wieder verfügbar ist oder der Benutzer schließlich dorthin gelangt Sie wollen gehen.

Wenn Sie reine AJAX-Anfragen machen, müssen Sie einen fehlenden Server selbst behandeln, anstatt sich auf den Browser zu verlassen, aber Sie müssten das sowieso wegen der acht Irrtümer von Distributed Computing erledigen # 1: "Das Netzwerk ist zuverlässig." (siehe http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing)

Also würde ich tatsächlich auf diese Anforderung zurückdrängen. Sie verlangen von Ihnen, etwas zu tun, das nicht wirklich den Anforderungen entspricht (Benutzer verlieren keine Daten, haben eine recht gute Erfahrung), das wird kompliziert, und das wird am Ende eine spröde Lösung sein.

+0

Es ist, weil die Sitzung verloren geht und alle Benutzer in der Mitte ihres Eintrags beginnen, sofort auf dem armen Admin zu rauchen. In den ersten Monaten der Bereitstellung werden Builds häufig aktualisiert, was iisreset erfordert und daher die Notwendigkeit einer Benutzerwarnung erfordert. – Deb

+1

Das klingt frustrierend! Vielleicht sollte die Anforderung lauten: "Sitzungsdaten überleben Server-Neustarts"? Das ist normalerweise viel einfacher zu implementieren als die ausgefallenen Sachen ... speichern Sie einfach Ihre Sitzungsdaten im StateServer oder in SQL Server. Nur wenn Sie den standardmäßigen "In-Process" -Sitzungsspeicher verwenden, werden alle Benutzersitzungen beim Neustart gelöscht. –

+0

das ist nur eine der Anforderungen. Der Manager möchte etwas Arbeit zuweisen oder ein Meeting planen ... etc.etc. – Deb

Verwandte Themen