Um ein Problem beim Senden von E-Mail über einen SMTP-Server, wo E-Mails nicht gesendet werden, zu lösen, wurde mir empfohlen, die Protokollierung mit System.Diagnosis.TextWriterTraceListener zu aktivieren, um die Kommunikation mit dem SMTP-Server zu verfolgen Fehler. Ich habe meiner web.config unter dem Knoten folgendes hinzugefügt:
%Vor%Ich habe es auf meiner Entwicklungsmaschine ausprobiert und es hat gut funktioniert! Ich konnte die komplette Kommunikation mit dem SMTP-Server bequem auslesen. In der Produktionsumgebung (auf IIS 6 in Windows 2003 Server) funktioniert es jedoch überhaupt nicht. Kein Protokoll wird in das Dateisystem geschrieben. Mein erster Gedanke war, dass das ASP.NET-Arbeitsprozesskonto (NETWORK SERVICE) möglicherweise nicht über ausreichende Rechte zum Schreiben in das Dateisystem am angegebenen Speicherort verfügte. Ich habe das behoben, aber bekomme immer noch kein Protokoll. Zweitens dachte ich, dass der Ordner möglicherweise auf "nur lesen" eingestellt war und das auch behoben wurde. Aber trotzdem bekomme ich kein Protokoll geschrieben.
Hat jemand eine Idee, was das Problem sein könnte? Oder vielleicht ein Ratschlag, wie ich das beheben könnte? Danke im Voraus!
Zuerst würde ich prüfen, ob die Ablaufverfolgung tatsächlich funktioniert, ohne etwas in das Dateisystem zu schreiben. Das heißt, ich würde einfach die normale Windows-Ablaufverfolgung verwenden. Um die Trace-Ausgabe anzuzeigen, verwende ich Windows Sysinternals DebugView . Natürlich, vielleicht sollten Sie Ihre Konfigurationsdatei ändern, ich bin nicht so vertraut mit der Syntax.
Wenn nun für beide Umgebungen (Entwicklung und Produktion) alles funktioniert, damit Sie die Trace-Nachrichten im Viewer anzeigen können, konzentriert sich das Problem mehr auf das Dateisystem und die Protokollspeicherung.
Wo finden Sie Ihre Log-Datei? Vielleicht ist es ein anderer Ort, wenn es um die Produktionsumgebung geht. Ich denke, dass Sie unter Windows Server 2003 Ihre Datei irgendwo unter WinDir und nicht in den Ordnern der Webanwendung suchen sollten.
Wenn es darum geht, solche Probleme zu debuggen, würde ich das IIS-Konto an den lokalen / Domain-Administrator eskalieren, nur um zu sehen, ob das Problem gelöst ist oder nicht. Wenn es gelöst ist, gibt es hier ein Berechtigungsproblem.
Viel Glück!
Ich würde damit beginnen, einen vollständig qualifizierten Pfad in das Attribut initializeData zu schreiben:
%Vor%Überprüfen Sie bei Bedarf, ob Ihre App Schreibzugriff auf diesen Pfad hat, indem Sie eine Testseite hinzufügen, die eine Datei im selben Verzeichnis erstellt.
Wenn Sie einen relativen Pfad wie in Ihrer aktuellen Konfiguration verwenden, glaube ich, dass er beim Ausführen unter IIS relativ zum Stammverzeichnis der Anwendung ist. Aber wenn es unter Cassini auf einem Entwicklungscomputer läuft, wird dies nicht der Fall sein - IIRC wird relativ zu% WINDIR% \ System32 sein, aber ich würde mich nicht darauf verlassen.
Haben Sie versucht, Process Monitor zu verwenden, um festzustellen, ob die Datei System.Net.trace.log vorhanden ist Datei wird geschrieben oder wenn es einen Fehler beim Erstellen gibt? Ist es möglich, dass es nur an einen seltsamen Ort geschrieben wird, nach dem Sie nicht suchen (ich glaube, der Standard sollte das aktuelle Arbeitsverzeichnis des ASP.NET-Arbeitsprozesses sein).
Mein Problem war, dass die TRACE-Konstante in einem abhängigen Projekt nicht definiert war. Obwohl sie im Hauptprojekt festgelegt wurde, wurde sie trotzdem nicht protokolliert. Nachdem ich dem abhängigen Projekt die TRACE-Konstante hinzugefügt hatte, funktionierte es wie erwartet.
Tags und Links .net asp.net logging system.diagnostics