2009-08-12 8 views
0

Wir haben eine IIS gehostete Web-Methode, die zufällig auf uns etwa 10% der Zeit stirbt. Bei dem Versuch, dies zu debuggen, haben wir Log.Debug() - Nachrichten vor jeder echten Codezeile hinzugefügt und es scheint, als würde es in zufälligen Zeilen absterben.IIS gehostet Web-Service-Methode Anruf nach dem Zufallsprinzip stirbt

Hat jemand dieses gesehen oder hat eine Idee, wie man das debuggt?

[weitere Details]

Wir haben viel Zeit es bei der Suche verbracht und habe folgendes entdeckt ...

  1. Wir haben eine seperate selbst gehosteten WCF-Dienst, dass der Zugriff gleiche Datenbank und lebt auf der gleichen Maschine. Bei starker Belastung krächzt die Webmethode jedes Mal. Wenn es nicht unter Last ist, funktionieren die Dinge normalerweise gut (aber nicht 100%).

  2. Hohe CPU scheint nicht Teil des Problems zu sein. Wir haben eine kleine App laufen lassen, die eine hohe CPU-Last erzeugte und der Web-Service ist nicht gestorben.

  3. Der Web-Service stirbt, wenn wir entweder einen XmlSerializer neu erstellen (ohne den Befehl sgen precomp auszuführen) ODER NHibernate eine SessionFactory erstellen lassen. Die einzigen beiden Dinge, die diese Dinge gemeinsam haben, sind, dass sie 1) wie Dinge erscheinen, die Menschen normalerweise tun. 2) scheinen, als wären sie ziemlich intensiv.

  4. Wir haben eine Global.asax hinzugefügt, um zu versuchen Application_End und Application_Error zu erfassen, aber weder Ereignis wird ausgelöst. Dies bedeutet für mich, dass es sich nicht um einen normalen Anwendungs-Pool-Reset handelt.

Antwort

0

figured it out .. zwei Probleme wirklich ..

  1. Wir haben Global.asax aber nicht über die erhalten kopiert haben erklärt, warum wir keine Nachrichten zu sehen waren. Wir setzten diese und fand heraus, dass ...

  2. Unsere WCF log in das bin-Verzeichnis des IIS-Web-Service ausgeschrieben wurde. Im Nachhinein ist das ziemlich albern, da der WS ein Webservice der alten Schule ist. Das WCF-Zeug ist in demselben Verzeichnis nur aus irgendeinem Grunde, die uns unbekannt ist, da die anfängliche Person, die Dinge eingerichtet ist weg ..

gelernt Lektion .. Irgendwo gibt es eine Nachricht ist, die alles erklärt .. Du musst es nur finden.

0

Klingt, als könnte es ein Threading-Problem sein. Sie verwenden informative Debug-Meldungen - Sie sollten versuchen, das Problem beim Ausführen des Debuggers und beim Brechen aller Ausnahmen zu reproduzieren. Stellen Sie sicher, dass Sie in allen Windows-Protokollen nach Informationen darüber suchen, warum der App-Pool abgestürzt ist.

Per Kommentar: Es ist schwer zu sagen, aber viele Dinge kann ein Thread dazu führen, zu scheinen „nur zu sterben.“ Speicherprobleme: Machst du irgendeine Interop? Falsches Marshalling: berühren Sie Daten in einem anderen Thread? Aber ich werde die Wahrscheinlichkeiten spielen und fragen, ob Sie sicher sind, dass Sie irgendeine Ausnahme behandeln, die passieren könnte, und sie protokollieren. Sind Sie sicher, dass Sie keine Ausnahme verschlingen und nicht melden? Irgendwo unten niedrig? Ist das ein Berechtigungsproblem? Führen Sie eine teilweise Vertrauensstellung oder ein Benutzerkonto mit niedriger Berechtigung aus?

+0

die Situation in unserer Entwicklungsumgebung Recreating wäre sehr schwierig, aber ich denke, dass wir den Punkt sind kurz vor dem, wo wir es als Option schauen müssen. In Bezug auf Threading war das auch mein Gedanke, aber was würde dazu führen, dass ein IIS-Thread einfach sterben würde? Wir sehen keine Nachrichten im Windows-Ereignisprotokoll, die mit IIS zu tun haben ... das scheint ... seltsam? Sollte es nicht zumindest eine Startup-Nachricht geben? –

Verwandte Themen