Frage

Ich habe so etwas wie den folgenden Code aus:

protected void Page_Load(object sender, EventArgs e)
{
   Label1.Text = Session["loginid"].ToString();
}

protected void delete_click(object sender, EventArgs e)
{
    delete("mail1",Session["loginid"]);
}

private int delete(string mailid, string user)
{
 System.IO.Directory.Delete(Server.MapPath(@"~\files\" + user + @"\" + mailid), true);
}

Wenn ich die Löschtaste drücken, funktioniert alles einwandfrei und der Ordner gelöscht wird. aber danach, wenn Seitenpostbacks dann wieder ein NullRefrenceException angehoben auf  Label1.Text = Session [ "loginID"] ToString ();.

Warum ist es passiert ... ??

Wenn ich nicht diese Directory.Delete () -Methode alles mit adaequat und Session-Variablen sind nicht auf null gesetzt.

Wenn ich meine Bewerbung zurückverfolgt fand ich, dass nach Directory.Delete () -Methode Session-Variablen intakt waren, und ich war in der Lage, diese Session-Variablen in der Verarbeitung nach Directory.Delete () zu verwenden.

Aber sobald die Seite Postbacks alles Session-Variablen werden auf Null gesetzt. Und dieses Problem wird nicht angezeigt, wenn ich nicht diese Methode delete () unter Verwendung von m.

Der Ordner I Löschen m im Ordner meines Projektes. Ich bin diese Website mit Visual Studio ausgeführt wird.

Bitte Hilfe.

War es hilfreich?

Lösung

Ein weiterer Vermutung hier aber vielleicht ist es, weil Ihr etwas in Ihrem Anwendungsverzeichnis Modifizieren (eine Ahnung, da Ihr mit Server.MapPath mit dem ~). IIS denkt vielleicht die App hat sich verändert und recycelt die Anwendung und als ein Ergebnis tilgt alle Sitzungen.

Dies ist ähnlich, wenn Sie Ihre Datei web.config ändern, während jemand die App verwendet, und es fällt alle Sitzungen und recycelt die App. Sind Sie ein Verzeichnis löschen, die Informationen, die IIS verwendet für die Anwendung enthalten?

Du hast gesagt, es geschieht nur, wenn Sie diese Zeile Code enthalten und eine Sitzung wird wirklich nur konsequent erhalten abgewischt (es sei denn Sie es selbst manuell tun), wenn die Anwendung von IIS oder Timeout zurückgeführt wird. Es ist offensichtlich nicht das Zeitlimit, so dass die Rückführung muss sein, was geschieht.

Andere Tipps

Ist Ihre ‚Dateien‘ Ordner in Ihrem Web-Anwendungsordner? Vielleicht Neustart selbst Anwendung, wenn Sie die Dateien löschen. Versuchen Sie sessionStateServer zu verwenden. Seine keep Sitzungen am Leben.

Web.config:

<configuration>
    <system.web>
        <sessionState mode="StateServer"></sessionState>
    </system.web>
</configuration>

einen Ordner in Ihrem virtuellen Verzeichnis löscht Ihre Anwendung Neustart verursachen kann, damit alle Sitzungsdaten zu verlieren. Um dies zu verhindern, löschen Sie entweder einzelne Dateien (nicht Ordner) oder die State verwenden, um Ihre Sitzungen zu erhalten.

Da die Seite korrekt geladen, bevor Sie die Löschtaste drückt, ist das Problem vermutlich mit der Session["loginid"].ToString() Referenz. Haben Sie einen anderen Code, dass Verweise Session["loginid"]? Der Code, den Sie hier gezeigt haben, wird nichts tun, dass entfernt von der Session loginid.

Wenn jedoch diese Anwendung auf einem Servercluster ausgeführt wird, und Sie verwenden den Standard-Sitzungsmodus von in-Prozess, können Sie den Zugriff auf Ihre Sitzung zwischen HTTP verlieren fordert, weil sie von verschiedenen Servern behandelt sind. Siehe hier für weitere Informationen.

  

Wenn ich die Directory.Delete remove ()   Funktion aus dem Code dann dem ganzen   Anwendung läuft so gut ohne   jede Ausnahme

Ok, scheint, dass wir Ihr Problem gefunden. Ihr Projekt hat die erforderlichen Berechtigungen nicht den direcotry löschen (auch wenn das Verzeichnis deleted.nevertheless ist: Es gibt Privileg Probleme)

Ich denke, dass Sie Anwendung eine Ausnahme wirft, während diese Datei Operation und eine neue Sitzung beginnt. Ich habe eine ähnliche Situation auf einem meiner Projekte, aber ich habe noch nicht herausgefunden, wie es zu lösen.

Ich bin mir ziemlich sicher, dass Sie mit der Beschreibung überein, wenn Sie die Global.asax und Satz Stützpunkte auf Application_OnError und Session_OnStart (oder nehmen jedoch sind diese Methoden richtig geschrieben). Sie werden sehen, dass das ein Fehler ausgelöst wird und danach eine neue Session gestartet wird.

Zuerst ein paar Plausibilitätsprüfungen:

  1. Does Sitzung Arbeit wie auf anderen Seiten zu erwarten?
  2. Ist Ihre Methode Delete Dateien in einem speziellen ASP.NET-Ordner zu löschen, wie App_Data oder App_Code, die die Anwendung neu starten verursachen können?

Hier ist, was ich würde versuchen, dieses Problem zu debuggen, nachdem er die obige Überprüfung:

  1. Legen Sie einen Haltepunkt auf der Löschmethode und hat das Session-Variable in einem Überwachungsfenster. Sehen Sie, was der Wert des Session-Variable ist, bevor der Anruf an Directory.Delete ist und was es ist danach. Ist es an diesem Punkt, wenn Sie Sitzung sind zu verlieren, oder nicht bis zum nächsten Seite besuchen?
  2. Verwenden Sie ein Tool wie Fiddler die Cookies zu prüfen, die zwischen dem Browser und Web-Server auf Postbacks. Überprüfen Sie, dass, wenn der Browser die ersten Besuche eine neue Session-Cookie wird im Browser erstellt und gespeichert werden. Dann, wenn Sie den Ordner zu löschen, ob der Web-Server sendet einen neuen Session-Cookie auf der Antwort des Postbacks. Dies würde darauf hindeuten, dass eine neue Sitzung erstellt wurde.

Danke

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