fragen stichworte

Erläuterung des Lebenszyklus der WCF-Anwendung in der IIS 6-Hostingumgebung

Hallo zusammen und vielen Dank für das Lesen,

Ich habe ein Verzögerungsproblem, bei dem meine Anwendung beim ersten Aufruf nach einem bestimmten Zeitraum seit dem letzten Anruf lange dauert. Die Webanwendung ist ein WCF-Dienst, und es handelt sich um eine Verzögerung von ~ 18 Sekunden, bevor die eigentliche Verarbeitung beginnt. Nun, ich glaube, ich weiß, wie ich diese Verzögerung reduzieren kann, so dass dies nicht meine Frage ist (es ist sowieso eher ein Stackoverflow-Deal)

Meine Frage ist. Kann mir jemand erklären, warum das Herunterfahren der Arbeitsprozesse deaktiviert ist und die Wiederverwendung von Arbeitsprozessen nach einer unbestimmten Zeit der Inaktivität immer noch "heruntergefahren" wird?

Um dies zu verstehen, muss ich mehr über die inneren Abläufe der in IIS gehosteten WCF-Dienste erfahren. Ich erwarte absolut, dass es eine direkte Antwort darauf geben wird.

Vielen Dank für Ihre Unterstützung. DC

antworten

Wenn auf der Registerkarte Recycling und Leistung des Worker-Prozesses alles deaktiviert ist, sollte IIS die Prozesse nicht beenden. Gibt es Ereignisprotokolleinträge, die der Zeit entsprechen, zu der der Prozess "heruntergefahren" wird? Es klingt für mich wie die WCF-App möglicherweise abstürzt. WCF protokolliert keine Ausnahmen für das Ereignisprotokoll wie eine Standard-.NET-App. Wenn Sie also keine eigenen Protokolle schreiben, möchten Sie möglicherweise die WCF-Ablaufverfolgung aktivieren, um zu sehen, ob dies möglicherweise das Problem ist.

Die schnelle, hässliche Lösung für Ihr Problem kann in der Zwischenzeit darin bestehen, in Ihrem WCF-Dienst eine Art billiger Test- oder Nur-Lese-Transaktion zu erstellen und einfach eine Überwachungs-App oder ein Skript zu konfigurieren, die alle X Sekunden abfragen, um den Arbeitsprozess am Leben zu erhalten mit dem Code vor-JIT'd.

Ich glaube, das Problem hatte nichts mit WCF zu tun, und der Fehler lag darin, dass nHibernate seine Zuordnungen aussortierte. Ich habe es gelöst, indem ich die nHibernate-Mapping-Dateien kompiliert habe, also musste nHibernate nicht.