Frage

Hier ist meine aktuelle Frage:

Ich vermute, dass mein Problem (wie unten beschrieben) von ASP.NET Worker-Prozesse verursacht wird, unter-ich bin nach den Antworten recycelt InProc Sitzungen Lagerung und sehen, nicht viel Chance weg, wegen die Beschränkung für andere Arten von Speicher, der alle Sitzungs Objekte serialisierbar sein. Allerdings kann ich nicht herausfinden, was den Arbeitsprozess so oft recycelt werden würde, wie ich sehe es-es gab keine Änderung der Dateien im Verzeichnis app soweit ich weiß, und die Optionen in IIS scheinen implizieren, dass der Prozess nur alle 1740 Minuten-die recycelt werden würde als die tatsächliche Sitzung Verlust viel seltener ist. Also, meine Frage ist jetzt, was andere Fälle kann ein ASP.NET-Arbeitsprozess dazu führen, recycelt werden?

Hier ist meine ursprüngliche Frage:

Ich habe ein schwer zu reproduzieren Problem, das in meiner ASP.NET Web-Anwendung auftritt. Die Anwendung verfügt über eine Haupt-ASPX-Seite, die geladen und initialisiert eine Anzahl von Session-Variablen. Diese Seite nutzt die Sys.Net.WebRequest Klasse ASP.NET Ajax wiederholt eine andere ASPX-Seite Zugriff auf, der die Session-Variablen verwendet, um Datenbankabfragen zu machen und die Haupt-Seite aktualisieren (die Haupt-Seite wird nie wieder angefragt).

Gelegentlich nach einer gewissen Zeit die Seite mit erfolgreichen HTTP-Anfragen verursacht, wo die Sitzung in der Haupt-Seite erstellt ordnungsgemäß an die Unterseite überträgt, die eine der Anforderungen scheint eine neue ASP.NET-Sitzung zu verursachen created- zu sein alles Session-Variablen gehen verloren (was eine Ausnahme in meinem Code geworfen werden), und eine neue Session-ID wird in der dynamisch angeforderte Seite gemeldet. Das bedeutet, dass plötzlich wird die Hauptseite von dem getrennten Server-so weit wie der Server betroffen ist, wird der Benutzer nicht mehr angemeldet.

ich fast sicher bin, es ist keine Session-Timeout-die Timeout-Zeit auf etwas lächerlich gesetzt ist, nimmt die Menge an Zeit, um dies zu geschehen zu bekommen, ist variabel, aber nie lange genug die Sitzung, um zu bewirken Zeitüberschreitung, < em> und die konstante Sys.Net.WebRequests sollte aktualisieren Sie die Session-Timer.

Also, was könnte sonst passieren, dass die HTTP-Requests verursachen würde Kontakt mit der ASP.NET-Sitzung zu verlieren? Ich habe leider nicht den Netzwerkverkehr gewesen Schnüffeln, wenn mir dies geschehen ist, oder ich würde überprüft haben, ob das ASP.NET Session-Cookie um oder nicht stecken hat.

War es hilfreich?

Lösung

Eine Lösung wäre eine State zu verwenden, anstatt InProc Sitzungsverwaltung.

Viele Dinge können den Sitzungszustand führen zu verlieren:

  1. Bearbeiten von Web.Config
  2. IIS Zurücksetzen
  3. etc.

Wenn der Sitzungsstatus, um Ihre Anwendung wichtig ist, dann entweder die SQL-Status-Management verwenden, oder den Staates Server, der Schiffe mit ASP. NET.

Cheers,

RB.

Andere Tipps

Wir hatten Probleme mit der Session, wenn wir die AnkerEx Anwendung auf die Migration haben neuer Server. Der neue Server hatte Microsoft Windows Server 2008 als Betriebssystem und Microsoft Internet Information Services 7 auch in dem Server installiert .NET Framework Versionen 1.0.3705, 1.1.4322, 2.0.50727, 3.0 und 3.5. Zur Lösung dieses Problems Ich habe ermöglicht die Überwachung der Gesundheit getan für Anwendung Lifetime Events in ASP.NET 2.0 verwendet. Ich hatte zu der web.config hinzugefügt:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

Es ist Hilfe für uns die AppDomain rezykliert zu überprüfen. Wir können es in unserer Ereignisanzeige sehen. Der Link, um mehr Details http: //blogs.msdn. com / rahulso / Archiv / 2006/04/13 / 575715.aspx

Nachdem ich web.config getan haben Zugabe zeigte die Ereignisanzeige mir, dass mein Anwendung neu gestartet wird jedes Mal, wenn ich zu fast jedem Link klicken Sie in meinem Anwendung. Aus dem Artikel von http://blogs.msdn.com/ toddca / Archiv / 2005/12/01 / 499144.aspx i fand heraus, dass ASP.NET das neue Verhalten hat - wenn wir das Löschen tun, zum Beispiel ein Unterverzeichnis des Stammverzeichnisses der Anwendung, dann ASP.NET 2.0 wird das tun Neustart AppDomain.

Das Problem war, dass die ich die Anweisung in der web.config hatte:

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

d. die ASP.NET hat die Erstellung von aspx Seiten in Ordner meiner Anwendung Wurzel. Ich glaube, er Ordner erstellt, sein kann und einige von ihnen auch haben zu entfernen. Ich entfernte TempDirectory Anweisung und die Anwendung begann mit der Arbeit stabil.

Der Arbeitsprozess ist wahrscheinlich Radfahren. http://www.lattimore.id.au/2006 / 06/03 / iis-dropping-Sessions /

Es könnte durch eine nicht behandelte Ausnahme in einem Hintergrund-Thread verursacht werden. Es kann Ihr ASP.NET-Arbeitsprozess zu beenden, führen. Ein neues Verfahren ist sehr schnell gestartet, so dass Sie es nicht wirklich merken aber alle Sitzungen verloren.

Hier ist ein Artikel, dass es viel besser erklärt als ich es kann: ASP.NET 2.0 Unbehandelte Ausnahme Probleme

Zitat:

  

Eine nicht behandelte Ausnahme in einer ASP.NET 2.0-Anwendung ausgeführt wird in der Regel die W3WP.exe Prozess beenden, und lassen Sie mit einem sehr kryptisch EventLog Eintrag etwas wie folgt aus:

     

"Ereignistyp clr20r3, P1 w3wp.exe, P2 6.0.3790.1830, P3 42435be1, P4 app_web_ncsnb2-n, P5 0.0.0.0, P6 440a4082, P7 5, P8 1, P9 System.NullReferenceException, P10 NIL."

Hier ist ein Microsoft KB-Artikel, der das gleiche Problem erklärt: KB911816 Unbehandelte Ausnahmen führen ASP.NET- basierte Anwendungen unerwartet beendet in den .NET Framework 2.0

Meine Vermutung wäre Speicherverbrauch - aber eingesetzten IIS rezykliert anmelden, und Sie werden sicher wissen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top