在我的WebAPI应用程序中,我试图Application_BeginRequest
根据我的自定义标头值登录到几个单独的数据库中。
为了实现这个目标我试图修改target
中Nlog.config
,像这样:
<target name="database"
xsi:type="Database"
connectionString="${gdc:item=myConnectionstring}"
commandText="..sql command..">..params..</target>
在Application_BeginRequest
我试图这样设置myConnectionstring
:
GlobalDiagnosticsContext.Set("myConnectionString", connectionString);
但这不起作用,并且在NLog的internalLogFile
错误中显示:
2015-02-19 12:12:48.8776 Error Error when writing to database System.InvalidOperationException: The ConnectionString property has not been initialized.
at System.Data.SqlClient.SqlConnection.PermissionDemand()
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at NLog.Targets.DatabaseTarget.OpenConnection(String connectionString)
at NLog.Targets.DatabaseTarget.WriteEventToDatabase(LogEventInfo logEvent)
at NLog.Targets.DatabaseTarget.Write(LogEventInfo logEvent)
我尝试将以下参数写入db(使用恒定连接字符串配置):
<parameter name="@cn" layout="${gdc:myConnectionstring}"/>
<parameter name="@cn1" layout="${gdc:item=myConnectionstring}"/>
但是它们似乎是空的,但是,当我调试WebApi Action时,该操作抛出了我希望写入数据库的错误,并GlobalDiagnosticsContext.Get("myConnectionString")
返回了预期值。
我做错了什么?为什么我可以在中看到期望值,GlobalDiagnosticsContext.Get("myConnectionString")
但${gdc:item=myConnectionstring}
解析为空字符串?
找到了另一种方法来实现这一目标:
var databaseTarget = (DatabaseTarget)LogManager.Configuration.FindTargetByName("database");
databaseTarget.ConnectionString = connectionString;
LogManager.ReconfigExistingLoggers();
但是仍然不清楚为什么GlobalDiagnosticsContext
东西不起作用..
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句