MVC4: Nach dem Neustart des Servers kann der interne Ajax-Serverfehler 500 nicht veröffentlicht werden

9

Ich baue eine MVC-Anwendung. Es verhält sich so komisch. Wenn ich es auf meinem Entwicklungsserver (Visual Studio-Debugging) ausführe, läuft es gut, auch wenn ich meine Anwendung mehrmals neu starte, indem ich die web.config ändere, aber wenn ich gehostet habe, verhält es sich so komisch.

Für die erste Ladung ist alles normal. Ich kann alle Seiten laden, per Ajax, usw. normal posten, aber nachdem ich den Server mit HttpRuntime.UnloadAppDomain(); neu gestartet habe, bekomme ich immer, wenn ich über Ajax poste, immer

  

interner Serverfehler 500

Ich weiß nicht, was mit der Anwendung passiert, aber ich habe den Verdacht, dass etwas mit dem Client (Benutzer) -Cache / Cookies nicht funktioniert.

Ich verwende [ValidateJsonAntiForgeryToken] -Attribut für die Controller-Funktionen, die den Post erhalten.

%Vor%

Und das ist der Code, der das json-Validierungs-Token behandelt

%Vor%

Dies ist das Beispiel, wie ich es poste:

%Vor%

Ich habe @Html.AntiForgeryToken() aus meiner Sicht. Was ist eigentlich falsch an meiner Bewerbung? Wenn das Problem besteht, dass das Benutzer-Cookie weiterhin vom System akzeptiert wird, aber nicht gültig ist, wie wird das Benutzer-Cookie zurückgesetzt, nachdem die Anwendung neu gestartet wurde?

---------------------------

Aktualisieren

Es scheint, dass der Code tatsächlich die Controller-Aktion passieren kann. Es gibt also kein Problem mit dem Validierungstoken, aber wenn der Code die Zeile erreicht hat, die versucht hat, Daten aus der Datenbank abzurufen, geschieht dies

  

Nachricht: Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. (Anbieter: SQL Network Interfaces, Fehler: 26 - Fehler beim Auffinden des Servers / der Instanz angegeben)

Dies ist meine Verbindungszeichenfolge:

Conn string:Data Source=ip address;Initial Catalog=the database name;Integrated Security=False;User ID=user;Password=the password;MultipleActiveResultSets=True

Dies ist der Code, der einen Fehler erzeugt:

%Vor%

Wenn ich es mit dem Inkognito -Modus starte, funktioniert es einwandfrei. Also, was genau passiert mit meiner Bewerbung?

-------------------

Update 2

Nach einem weiteren Debugging bin ich mir jetzt sicher, dass das Problem in den Cookies liegt.

Dies sind die Cookies:

  1. .ASPXAUTH
  2. ASP.NET_SessionId

Ich verwende "InProc" als meinen Sitzungsstatus, der nach dem Recyceln / Neustarten der Anwendung zurückgesetzt werden sollte. Das ist mein Ziel, aber ich weiß nicht, warum die Cookies nach dem Neustart der Anwendung noch vorhanden sind .

Ich möchte also die Sitzung für alle Benutzer ungültig machen, wenn der Server neu gestartet wird.

Die Lösung ist entweder:

  1. Alle Sitzungen von allen Benutzern abrufen und ungültig machen
  2. Melden Sie alle Anmeldebenutzer bei Application_End ()
  3. ab

Beide Lösungen sind aus meiner Forschung nicht möglich. Bitte helfen Sie

    
Alvin Stefanus 20.12.2016, 08:36
quelle

4 Antworten

0

Der Fehler liegt darin, dass der Cookie nach dem Serverneustart nicht ungültig wird.

Das mache ich also:

Bei jedem Neustart des Servers erstellt der Server einen Cookie, der den Zeitpunkt des Starts der Anwendung enthält und ihn an alle Benutzer weitergibt.

In Global.asax "Application_BeginRequest" wird der Cookie überprüft, der die Anwendungsstartzeit enthält, wenn der Cookie die frühere Zeit hält, dann:

%Vor%

um alle störenden Kekse zu entfernen. Danach wird der Benutzer auf die Anmeldeseite umgeleitet.

    
Alvin Stefanus 04.01.2017, 08:29
quelle
1

Ich denke, dies hilft Ihnen bei der Einrichtung eines Ereignisses, das jedes Mal ausgelöst wird, wenn der App-Pool rezylt und dann dies wird Ihnen helfen, alle Cookies in diesem Ereignis ablaufen zu lassen.

    
Rachit Pandey 29.12.2016 11:58
quelle
1

Der AntiForgeryToken (in einem versteckten Feld gespeichert) wird nach dem Neustart der App geändert, also alle Werte aus der vorherigen App-Sitzung (bereits in Ihrem HTML im Browser geladen) sind veraltet. Sie müssen die Seite nach dem Start der App aktualisieren, um den neuen Token-Wert zu erhalten, sonst werden alle Ajax-Aufrufe abgelehnt! Außerdem gibt es einen Cookie namens "__RequestVerificationToken", der zum Speichern dieses Werts verwendet wird. Sie müssen diesen auch entfernen, wenn er existiert.

    
Tha'er M. Al-Ajlouni 29.12.2016 12:11
quelle
0

Da Sie ein Problem mit Cookies haben, können Sie damit alle Cookies löschen

%Vor%

Sie könnten das aufrufen, wenn Sie HttpRuntime.UnloadAppDomain()

aufrufen

Cookies überleben, weil sie nicht auf der Serverseite sind; -)

    
quelle