Frage

Ich entsandte eine ASP.NET Web-Anwendung gestern Abend und ich, wenn ich heute Morgen aufwachte, war es sehr langsam und würde wirft gelegentlich nur einen ‚Dienst nicht verfügbar‘ Fehler.

überprüfte ich die Ereignisanzeige, und es wurde mit diesen Fehlern gefüllt:

  

Eine nicht behandelte Ausnahme aufgetreten ist, und der Prozess beendet wurde.

     

Ausnahme: System.Runtime.Serialization.SerializationException

     

Nachricht: Kann nicht Assembly 'MonoTorrent, Version = 0.80.0.0, Culture = neutral, PublicKeyToken = null'

finden

Ich bin verwirrt, wie es war perfekt arbeiten, als ich es zum Einsatz (MonoTorrent erforderlich, um die Anzahl der seeders / leechers für einen bestimmten Strom aus dem Tracker abrufen - das funktioniert gut), aber es ist nicht mehr funktioniert und wann immer Code dass Anwendungen MonoTorrent einläßt, nur der Arbeitsprozess stürzt.

MonoTorrent.dll ist in der / bin / Verzeichnis.


UPDATE 6/4/10: ich die MonoTorrent Quellcode in mit dem Rest meiner Web-Anwendung kompiliert, aber es stürzt nach wie vor, wenn es MonoTorrent verwendet. es sagt jedoch jetzt, dass es Unable to find assembly 'OpenPeer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ist. Hier OpenPeer ist der Name der Webanwendung Montage.

Keine korrekte Lösung

Andere Tipps

Dies kann unter diesen Umständen geschehen:

Die ASP.NET-Anwendung erstellt einen Hintergrund-Thread, der eine abgefangene Ausnahme wirft. Es sieht aus wie ASP.NET die Ausnahme abfängt und will sie in das Ereignisprotokoll protokollieren. Um dies zu tun, sendet es diese Ausnahme von der App-Domain des Web App eine eigene Anwendungsdomäne (der Standard eine der w3wp Prozess). Dies muss eine Serialisierung / Deserialisierung der Ausnahme.

Wenn die Ausnahme ein benutzerdefiniertes ist (dh von dem Web-App definiert), kann sie nicht in der Hauptanwendungsdomäne von ASP.NET deserialisiert werden, da die Baugruppe definiert, die Ausnahme der Regel ist in dem Verzeichnis ist der Web-App, nicht wo w3wp EXE ist (C: \ windows \ system32 \ inetsrv). Dies führt zu einer Serialisierung Ausnahme und w3wp stürzt ab.

Es gibt Möglichkeiten, das Problem zu beheben (in einem - sehr subjektiv - Reihenfolge der Präferenz):

  1. Kopieren Sie die fehlenden DLL in c: \ windows \ system32 \ inetsrv
  2. Installieren Sie die fehlenden DLL im GAC
  3. Entfernen Sie die Ursache der Ausnahme (härter als zu tun, um zu sagen, wie wir in Französisch sagen)
  4. Fangen Sie alle Ausnahmen von der Hintergrund-Thread selbst und machen Sie die Protokollierung selbst.

Weitere Informationen:

  • Wenn WCF verwendet wird und die abgefangene Ausnahme ist FaultException, WCF schluckt es und es gibt keinen Absturz
  • Wenn die abgefangene Ausnahme im Thread der Web-Anforderung ist, gibt es einen gelben Schirm des Todes, nicht diese Serialisierung Ausnahme
  • Es scheint wirklich wie ein Fehler in ASP.NET
  • Die oben ist eigentlich eine Zusammenfassung meiner Untersuchungen dieser Frage gestern und ist nur eine Theorie. Getestet habe ich Fixes 1 und 4 sowie mit FaultException.

Versuchen Sie Löschen der temporären Dateien ASP.NET . Es ist gelöst einige seltsame Probleme, bevor für mich.

Ansonsten Fusion-Protokollierung können Schuppen etwas Licht.

UPDATE: @Charlie - Ich bin nicht sicher, was diese Protokolle zu machen ... es sieht aus wie das ausgefallene Protokoll aus einer anderen AppDomain ist. Beachten Sie die AppBase wird auf "file: /// C: / windows / system32 / inetsrv /" und AnwName w3wp.exe ist.

Ich bin mir ziemlich sicher, dass das Event Viewer Application Id zeigen sollte: LM / W3SVC / # / ROOT, wenn es die Standard-AppDomain war, auch. An dieser Stelle alles, was ich habe ist zufällig Vermutungen.

  1. Ich merke, du läufst x64 ... tut MonoTorrent vielleicht erfordern x86 ?
  2. Haben Sie doppelt geprüft, dass das Verzeichnis ist eine IIS-Anwendung und ist für die korrekte Version von ASP.NET konfiguriert?
  3. Gibt es eine andere Anwendung, die MonoTorrent auf diesem Server verwendet? Vielleicht ein WCF-Dienst, oder was? Ich bin mir nicht sicher, wo die Serialisierung geschieht ....
  4. Versuchen Sie, die AssemblyResolve Ereignis und Laden Einhaken es manuell.
  5. Kann repro Sie auf einer Entwicklungsmaschine? Wenn nicht, vielleicht ist es ein borked FX installieren. Deinstallieren und erneut installieren.
  6. Ist Neustart, Recycling oder Stoppen / Starten der AppPool das Problem vorübergehend zu beheben, oder bewirken, dass die Ausgabe erscheinen?

Sie möchten Ihren Screenshot Text auch geben, so dass Sie einige Google Liebe bekommen ....

Hier sind einige Dinge, die Sie ausprobieren können ..

1.) Flush ASP.Net Temp-Verzeichnis . IIS neu starten und Recycling-Anwendungspool .

2.) Stellen Sie sicher, dass Ihre Web-Anwendung läuft in FULL-TRUST , wenn es wirklich FULL-TRUST muss.

3.) Nehmen Sie die Montage, versuchen, es zu verwenden, in anderen asp.net Anwendung und ausführen, um die Testanwendung auf einem separaten Server . Dies könnte helfen, das Problem zu diagnostizieren. Versuchen Sie auch den Test asp.net app auf dem gleichen Server, aber in separaten Anwendungspool ausgeführt werden.

4.) Stellen Sie sicher, dass die IIS-Website Ihrer Anwendung wird unter dem Benutzerkonto mit den notwendigen Sicherheits läuft priviliges . Versuchen Sie, die Anwendung unter Administratotr als Benutzer ausgeführt wird.

EDIT-1

5.) Überprüfen Sie auch, ob die Assemblierung-Version ist die gleiche wie in web.config erwähnt. Wenn ein Versionskonflikt ist, dann können Sie tun assembly Redirection in web.config.

6.) Versuchen, auch die Montage in GAC registaering und sehen, ob es richtig geladen wird.

EDIT-2

Versuchen

7.) Reconfigring ASP.NET-Unterstützung auf dem Server oder vielleicht Rahmen Runtime Neueinstellung helfen kann. Dies kann nicht eine Sure-Shot Lösung sein, aber das Problem Bedingung suchen wir wollen können verschiedene Lösungen ausprobieren.

8.) Stellen Sie sicher, dass Sie keine kritisches Update Ihres Windows-Server nicht gefunden werden Plattform.

Ich versuche, Ihnen einige Ideen zu geben -., Was ich tun, wenn ich auf Ihre Position war

Zunächst einmal nehme ich einen langen Blick der MonoTorrent.dll vor einigen Tagen, dass Sie Ihre Frage stellen, und ich sehe es heute wieder. Ich fand und die Funktion, die die DLL zu laden. Meine erste Meinung ist, dass etwas mit den Berechtigungen zu tun.

Ich hoffe, dass Sie den Zugriff auf den Server haben - rechts

Meine ersten Schritte ist, dass:

Stellen Sie sicher, dass Ihre monotorrent.dll die richtigen Berechtigungen für das Verzeichnis bin haben Actuall , für Lesen und Ausführen von Ihrem asp.net app. Einige Male der Kopie einer DLL, haben nicht die Verzeichnisberechtigungen buts Wagen seine eigenen Berechtigungen. Um zu überprüfen, ob Ihre dll unterschiedliche Berechtigungen vom Rest hat, genau richtig klicken und sehen Eigenschaften | Sicherheit, dann gehen Sie zu bin-Verzeichnis und das gleiche tun, und die Sicherheitsberechtigungen vergleichen. Wenn sie unterschiedlich sind, dann gelten wieder die Verzeichnisberechtigungen und stellen Sie sicher, dass die DLL durch das Verzeichnis vererbt.

Mein zweiter Schritt

Laden Sie die ProcessMonitor- von Sysinternals

http://technet.microsoft.com/en-us/sysinternals /bb896645.aspx

Ausführen Process und versucht, den Fehler erstellen , stoppen sie und analysiert, um zu sehen, wo und warum die dll die verweigerten Berechtigungen erhalten auszuführen. sehen mit dem Process können Sie selbst wenn es eine DLL ist, die nicht finden kann!

Ich habe die MonoTorrent dlls überprüfen und ich habe nichts Ungewöhnliches gefunden. Er habe kerner32.dll Anrufe und verwendet unsicheren Code zu laufen, ok nichts so besonders an.

Also, wenn Sie feststellen, dass zwei Schritte tun und geben Sie mir ein Feedback, vielleicht kann ich weiter gehen. (Wenn nicht von Ihnen zu lösen und was Sie finden)

Ich würde empfehlen die Einrichtung Regular maintanence wahrscheinlich einmal in der Woche am Sonntag Nacht usw. für folgende,

  1. Löschen Sie alle temporären Dateien
  2. Alle löschen ASP.NET IIS temporäre Dateien
  3. Restart Server

Das Problem ist, ASP.NET Web-Anwendungen Ursache viel temporäre Dateien auf der Platte gelassen werden, weil der dynamischen Erstellung von regex, seriliazation Baugruppen usw., wie Temp Zeug wird nie gelöscht, und mehr und mehr Junk beginnt gesammelt immer in Temp Orte ASP.NET geht langsamer und langsamer, und ein Punkt kommt in dem Datenträger sowie Speicher Defragmentierung erreicht sehr hohe Punkt, beginnen die Dinge zum scheitern verurteilt.

mag Kein Körper Server einmal pro Woche neu zu starten, aber ich erinnere mich uns keine andere Wahl hatten, in ASP.NET 1.1 hatten wir stabiles System nach jedem Tag neu zu starten, in ASP.NET 2.0 ab, wir sind gut geplant zu haben Neustarten bei einmal pro Woche.

Ich habe dieses Problem gefunden und ich habe alle Dinge tun, wie ich kann, wie klar temporäre Datei, neu startet Server, löschen und Verweis hinzufügen und ich wieder aufbauen auch die Lösung. Allerdings kann ich die Lösung dieses Problems nicht. Schließlich ich meine Entitätsklasse bewegen, um neue Ordner (fast von ihnen serialisiert müssen), dass ich zu dem Projekt hinzugefügt haben, und dann wird dieses Problem gelöst.

Diese Methode ist für mich arbeiten.

Ist die Server-Zeitzone anders als Ihre Zeitzone? Ich habe dieses Problem habe, als Ressource-Dateien bereitstellen, die Kompilierung in der Zukunft war, so dass sie zu Last fehlschlagen würden.

Meine Vermutung, dass Sie viel offen, aber nicht geschlossen Verbindungen haben. Ich meine die Verbindungen nicht an den Pool zurückgegeben. Es sieht okay, wenn Sie die Anwendung starten, aber nach einiger Zeit gibt es nur mehrere Steckdosen in dem Pool und es geht langsam. Eine andere Sache - nicht geschlossene Verbindung kann DLL halten im Speicher, so dass nicht die Prozedur lösen. Versuchen Sie zu Debug-Objekt Zerstörung.

Ich weiß, es ist einfach, aber ich hatte dieses Problem einmal und itwas, weil ich ein webanwendungsprojekt hatte die

enthält
    References

Ordner und ich nur meine Dateien in ein

kopiert
    Bin

Ordner, in jeder .net Web-Anwendung in den Projekteigenschaften-Fenstern , Referenzpfad Registerkarte ist verfügbar, die standardmäßig soll nichts darauf schließen werden. Aktivieren Sie diese Option und auch Register Erstellen in Projekteigenschaften-Fenster , die Ausgabepfad sein als die gleichen wie ist \

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