6

我正在尝试使用 Enterprise Library MSMQ Distributor 服务来获取放置在 MSMQ 队列中的日志消息,并通过 Logging 块的标准数据库部分将它们放置在数据库中。

但是,当我尝试启动 Distributor 服务时,出现以下异常:

Exception Type: System.Configuration.ConfigurationErrorsException
Message: Invalid TraceListenerData type in configuration 'listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database"'. (C:\Projects\LogTest\msmqDistributor\MsmqDistributor.exe.Config line 15)

有问题的行如下所示:

  <listeners>
   <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database"
    databaseInstanceName="LoggingDB" writeLogStoredProcName="WriteLog"
    addCategoryStoredProcName="AddCategory" formatter="Text Formatter"
    traceOutputOptions="DateTime, Timestamp" />
  <!-- other listeners -->
  </listeners>

我无法弄清楚侦听器定义有什么问题 - 似乎分发者找不到它,但据我所知,相关的 dll 在同一个文件夹中。对不同的应用程序运行相同的配置可以正常工作并将日志条目写入数据库,因此似乎它可能与服务权限有关,但我不知道我需要以哪种方式查找此权限。

4

2 回答 2

4

这个问题归结为有错误的 .dll 版本可用。如果您同时拥有 Enterprise Library 的源版本和二进制版本,则需要确保使用与用于创建配置文件的 EntLibConfig.exe 版本相同的库。因此,如果您使用二进制分发中的 EntLibConfig 文件,您需要使二进制分发中的 dll 可用于由它们配置的应用程序。否则你所有的引用都会被打乱,你会得到这种类型的错误。

于 2013-01-29T14:53:58.323 回答
1

我知道您已将此标记为已回答,但我遇到了这个问题,您可以解决它,而无需恢复到与 EntLibConfig 匹配的另一个 EntLib 版本。在我的情况下,我使用的是 EntLib 5.0.505.0 版,而 EntLibConfig.exe 需要 EntLib 5.0.414.0 版,就像你在配置文件中一样。只需在您的配置文件中每次出现 version=5.0.414.0 到正确的版本,这将起作用。那应该是 loggingConfiguration 的 Config 部分以及 Listener 和 formatter 部分。

缺点是您将无法再在 EntLibConfig.exe 中打开配置文件,因为它将尝试使用旧版本

entlibconfig 错误

于 2015-02-25T22:40:42.563 回答