2010-12-07 7 views
1

Diese Frage bezieht sich auf Grenzen, die mir von ASP.NET auferlegt werden (wie Skript-Timeout usw.).asp.net Endlosschleife - kann dies getan werden?

Ich habe einen Dienst unter ASP.NET laufen und ich möchte einen Gegenpartendienst für die Überwachung erstellen.

Die Daten des Hauptservices befinden sich in einer Datenbank.
Ich dachte daran, den Überwachungsdienst die Datenbank in Intervallen von 1 Sekunde innerhalb einer Schleife abfragen zu lassen, die von einer http-Anfrage des entfernten Clients ausgegeben wurde.
Nun wird die eigentliche Bereitstellung dieser Überwachung von einer Client-HTTP-Anfrage durchgeführt, die die Skriptschleife (in C# geschrieben) erstellt, und wenn neue Daten erkannt werden, werden diese Daten in diesen einen Schleifenanforderungs-Ausgabepuffer, send, aggregiert und beenden Sie die Schleife, um die Anfrage zu beenden.
Der Client muss eine neue Anforderung ausgeben, um Updates zu erhalten.

Das ist eigentlich genau wie TCP (genau wie Windows IOCP); Sie fordern den Dienst für Daten an und warten darauf. Wenn es ankommt, feuern Sie eine weitere Anfrage ab.

Meine eigentliche Frage ist: Hast du es schon einmal gemacht? Wie ist es gelaufen? Bin ich durch einige (konfigurierbare) Grenzen eingeschränkt, die durch das IIS/ASP.NET-Framework auferlegt werden? Was sind meine Grenzen in einer solchen Situation, oder, was sind bessere Optionen ohne die Dinge zu viel zu komplizieren?

Beachten Sie, dass ich nicht viele solche Überwachungsaufforderungen gleichzeitig erwarte, vielleicht ein paar Dutzend.
Dies bedeutet jedoch, dass 10 solche gleichzeitige Überwachung Anforderungen 10 Threads besetzt halten, und die Frage ist; Kann es IIS/Leistung schaden? Wie behandelt IIS 10 aktive Threads? Wird es mehr ausgeben? Was sind die Grenzen? Dies ist nur ein Beispiel für eine Grenze, die ich mir vorstellen kann.

Antwort

1

Ich denke, dass Sie Hauptsorge in dieser Situation Zeitlimits wären, die ziemlich konfigurierbar sind. Aber ich denke, dass es eine falsche Lösung ist - Sie wären besser mit einem Hintergrunddienst, der ständig/periodisch läuft und die Überwachungsdaten in einen Datenspeicher schreibt, und dann würde Ihre Überwachungsseite ihn nur auf Anfrage zurückgeben.

Wenn Sie möchten, dass Ihre Seite nur angezeigt wird, wenn die Monitorign-Daten verfügbar sind - implementieren Sie sie mit ajax - auf Seite laden Abfrageüberwachungsdienst, dann, wenn einige Überwachungsereignisse verfügbar sind - rendern Sie sie, wenn nicht - schlafen und erneut abfragen .

IMO das wäre eine viel bessere Lösung als eine echte lang laufende Anfragen.

+0

Danke für die Antwort Hassan. Sie schlagen also einen Dienst für den Überwachungsdienst vor? – Poni

+0

Es könnte ein Dienst sein, es könnte eine geplante Konsole App sein - das ist eine Frage der Implementierung, aber im Grunde - ja, ich schlage vor, einen Überwachungsdienst zu erstellen und lassen Sie die ASP.NET-Seite nur die Überwachungsberichte bis zum Ende zeigen Benutzer. Auf diese Weise würden Sie eine viel sauberere Architektur erhalten, und Sie wären nicht auf eine geringe Anzahl von Benutzern beschränkt, indem Sie Überwachungsprotokolle ansehen (da das Anzeigen sehr kostengünstig wäre). – Hassan

+0

Ich denke, Sie vermissen meinen Punkt hier: Sie sprechen über häufige HTTP-Anfragen von Clients und zeige ihnen nichts, wenn nichts neues erzeugt wurde. Ich spreche von einer langatmigen HTTP-Anfrage, die, wenn neue Daten/Updates generiert werden, sofort geliefert wird, weil eine HTTP-Verbindung mit diesem Client bereits geöffnet ist. – Poni

0

Ich denke, es wird nicht eine sehr gute Idee, einen Dienst mit ASP.NET aufgrund der folgenden Gründe zu überwachen ...

  1. Was passiert, wenn Ihr Anwendungspool abstürzt?

  2. Was ist, wenn Sie sich für IISReset entscheiden? Welche Anwendung wird zuerst angezeigt ... die Haupt-App oder die Überwachungs-App?

  3. Was passiert, wenn die Überwachungsanwendung aufgrund der Last hängt?

  4. Was ist, wenn die Last bereits auf dem Hauptservice hoch ist?Würden Sie es nicht alle 1 Sek. Überwachen, die Belastung für den primären Dienst und für IIS erhöhen?

Sie erhalten die Idee ...

+0

Ich plane, beide in eine "IIS Application Domain" zu legen, so dass beide ungefähr zur gleichen Zeit starten, und es ist nicht kritisch (für mich). Außerdem muss ich es zumindest versuchen, bevor ich Dinge verkompliziere. Ich kann eine gemeinsame assoziative Liste verwalten, die sicherstellen wird, dass jeder Überwachungsclient jeweils eine Anfrage gleichzeitig verwendet und deren Anzahl begrenzt. Einfach klingt viel praktischer, eine ganz andere App zu schreiben, um das zu tun, zumindest bei Anfang. – Poni

Verwandte Themen