Elmah - ASP.NET -> Mehrere Connection Strings -> SQL-Error-Log-Verbindungszeichenfolge im Code
Ich bin auf der Suche zu integrieren ELMAH in eine bestehende ASP.NET Anwendung auf weitere Unterstützung Fehlers Untersuchungen und könnte etwas Hilfe gebrauchen mit den Verbindungszeichenfolgen. Wir verwenden eine einzelne web.config-Datei für alle oder unsere Umgebungen die Anwendung bereitgestellt wird, und zur Laufzeit der app entscheidet, welche Umgebung Sie ist, in der Regel auf URL-Basis.
Dies ist, was ein standard-block möchte wie für uns...
<connectionStrings>
<add name="TESTAppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
<add name="CERTAppDB" connectionString="Data Source=SQL-C-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
<add name="PRODAppDB" connectionString="Data Source=SQL-P-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
</connectionStrings>
Mit Elmah, es scheint, dass Sie müssen nur geben Sie den Namen der Verbindungszeichenfolge ein, aber wie kann ich dies dynamisch zur Laufzeit? Zum Beispiel, wenn ich mich testen, dann möchte ich diese:
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTAppDB"/>
</elmah>
aber wenn ich in PROD:
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="PRODAppDB"/>
</elmah>
BEARBEITEN
Die Bereitstellungs-Verfahren für web-Anwendungen sind auch außerhalb des Bereichs für das, was ich zu tun versuche. Ich brauche eine code-Lösung, die mir erlaubt, ändern Sie die Datenquelle für den ELMAH Sql-Fehlerprotokoll...
Kann ich nicht ändern die Art, wie wir-deploy-web-apps heute. Das bedeutet, dass, was sich im TEST, bewegt sich zum CERT. Was ist in CERT bewegt PROD. Die web-app muss in der Lage sein zu bestimmen, welche Umgebung Sie ist, und führen als solche...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit Elmah ist open-source, es wäre einfach zu fügen Sie Ihre eigenen 🙂
Alles, was Sie würde tun müssen, war, fügen Sie eine neue statische Eigenschaft, um die
SqlErrorLog
Klasse, die würde, die die Verbindungszeichenfolge enthalten, die Sie wollte und dann würden Sie aktualisieren dieSqlErrorLog.ConnectionString
Eigenschaft zurück, Ihre benutzerdefinierten Verbindungszeichenfolge, wenn er es hätte einen Wert.Versuchen, fügen Sie so etwas wie dieses auf die Klasse (Achtung - ungetestet-code):
Dies sollte genug sein. Alles was Sie jetzt tun müssen, ist, um den Ort zu finden, wo Sie Ihre Verbindungszeichenfolge und zu aktualisieren, um auch die
SqlErrorLog.CustomConnectionString
Eigenschaft.Ich ein Web-Projekt Bereitstellung für dieses. Sie können eine Datei angeben, mit der Sie die Verbindungszeichenfolge in der es für jede Konfiguration (Debug und Release standardmäßig). Auf diese Weise werden alle Ihre config-Dateien für alle Implementierungen haben die gleichen Dateien und Ihrer Website.config ist entsprechend aktualisiert, für jede Bereitstellung.
Scott Gu hat gute Infos hier: http://weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx
Ist es für eine frühere Version, aber die Informationen immer noch gilt.
Ich würde verwenden Sie eine Verbindungszeichenfolge Namen "AppDB", aber eigentlich host die Verbindung Zeichenfolge, die in einer externen (außerhalb des web.config-Datei) config-Datei, dass ist in jeder Umgebung.
In Ihrer Website.config:
Dann in die connectionStrings.config-Datei:
Dann, je nachdem, in welcher Umgebung die connectionStrings.config-Datei ist, ändern Sie den connectionString. In dem code, nur beziehen Sie sich auf "AppDB".
Bauen auf Rune Grimstad Antwort, zusätzlich zu seinen änderungen, hinzufügen:
nach:
in der SqlErrorLog(IDictionary config) - Konstruktor.
Dann Tat ich, was RSolberg haben, aber in der application_start-im Gegensatz zu session:
Elmah.SqlErrorLog.CustomConnectionString = "Dein CS";
Können, verwenden wir in diesem Fall Datenbank-Kontext?
Ich habe eine webapp in MVC 3 und ich eine Datenbank mit dem Datenbank-Kontext (nach obigen Beispiel):
Wo TESTAppDB:
Wenn ich will, um eine Verbindung zu einer anderen Datenbank, also Schreibe ich:
Es scheint richtig zu sein...