【问题标题】:"An error occurred creating the configuration section handler for" -“创建配置节处理程序时出错” -
【发布时间】:2026-02-21 13:45:02
【问题描述】:

我们在自定义配置部分的测试环境中遇到了一个奇怪的错误。

这适用于在开发和测试环境中使用 SQL Server 2008 在 Enterprise Server 2008 r2 64 位上运行的 Windows 服务。

本部分配置我们的共享代码库,以便在处理错误时向感兴趣的各方发送电子邮件,并使用如下代码发布:

catch(Exception ex)
{
    ExceptionManager.Publish(ex);
}

错误细节(完整细节 - 更改名称以保护无辜)

4   <configSections>
5       <section name="exceptionManagement"
6                type="Company.Shared.ExceptionManagement.ExceptionManagerSectionHandler, Company.Shared" />
7   </configSections>
8   <exceptionManagement>
9       <publisher assembly="Company.Shared" type="Company.Shared.ExceptionManagement.DefaultPublisher"
10                 logName="CPODSOracleDataExchange" applicationName="CPODSOracleDataExchange Service" />
11      <publisher assembly="Company.Shared" type="Company.Shared.ExceptionManagement.ExceptionManagerSMTPPublisher"
12                 from="CPODSOracleDataExchangeService@Company.com"
13                 defaultRecipients="dev1@Company.com,dev2@Company.com"
14                 applicationName="CPODSOracleDataExchange Service" />
15  </exceptionManagement>


1) Exception Information
*********************************************
Exception Type: System.Configuration.ConfigurationErrorsException
Message: An error occurred creating the configuration section handler for exceptionManagement: Request failed. (E:\CITApps\Services\CPODS.OracleDataExchangeService\Company.CPODS.OracleDataExchangeService.exe.Config line 5)
BareMessage: An error occurred creating the configuration section handler for exceptionManagement: Request failed.
Filename: E:\CITApps\Services\CPODS.OracleDataExchangeService\Company.CPODS.OracleDataExchangeService.exe.Config
Line: 5
Errors: System.Configuration.ConfigurationException[]
Data: System.Collections.ListDictionaryInternal
TargetSite: System.Configuration.FactoryRecord FindAndEnsureFactoryRecord(System.String, Boolean ByRef)
HelpLink: NULL
Source: System.Configuration

StackTrace Information
*********************************************
   at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(String configKey, Boolean& isRootDeclaredHere)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at Company.Shared.ExceptionManagement.ExceptionManager.Publish(Exception exception, NameValueCollection additionalInfo)

2) Exception Information
*********************************************
Exception Type: System.Security.SecurityException
Action: Demand
PermissionType: System.Security.PermissionSet
FirstPermissionThatFailed: NULL
PermissionState: <PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>

Demanded: <PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>

GrantedSet: 
RefusedSet: 
DenySetInstance: NULL
PermitOnlySetInstance: <PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Access="Open"/>
<IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Allowed="ApplicationIsolationByUser"
UserQuota="1024000"/>
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Execution"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Window="SafeTopLevelWindows"
Clipboard="OwnClipboard"/>
<IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Level="SafePrinting"/>
<IPermission class="System.Security.Permissions.MediaPermission, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
version="1"
Audio="SafeAudio"
Video="SafeVideo"
Image="SafeImage"/>
<IPermission class="System.Security.Permissions.WebBrowserPermission, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
version="1"
Level="Safe"/>
</PermissionSet>

FailedAssemblyInfo: NULL
Method: Void InitWithRestrictedPermissions(System.Configuration.RuntimeConfigurationRecord, System.Configuration.FactoryRecord)
Zone: NoZone
Url: 
Message: Request failed.
Data: System.Collections.ListDictionaryInternal
TargetSite: System.Object CreateInstance(System.RuntimeType, Boolean, Boolean, Boolean ByRef, System.RuntimeMethodHandleInternal ByRef, Boolean ByRef)
HelpLink: NULL
Source: mscorlib

StackTrace Information
*********************************************
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Configuration.TypeUtil.CreateInstanceWithReflectionPermission(Type type)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
   at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
   at System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(FactoryRecord factoryRecord)
   at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(String configKey, Boolean& isRootDeclaredHere)

有问题的配置文件部分(带有行号):

4   <configSections>
5       <section name="exceptionManagement"
6                type="Company.Shared.ExceptionManagement.ExceptionManagerSectionHandler, Company.Shared" />
7   </configSections>
8   <exceptionManagement>
9       <publisher assembly="Company.Shared" type="Company.Shared.ExceptionManagement.DefaultPublisher"
10                 logName="CPODSOracleDataExchange" applicationName="CPODSOracleDataExchange Service" />
11      <publisher assembly="Company.Shared" type="Company.Shared.ExceptionManagement.ExceptionManagerSMTPPublisher"
12                 from="CPODSOracleDataExchangeService@Company.com"
13                 defaultRecipients="dev1@Company.com,dev2@Company.com"
14                 applicationName="CPODSOracleDataExchange Service" />
15  </exceptionManagement>

这个完全相同的配置在我们的 DEV 环境中运行良好。据我所知,这些是相同的环境,并且两个服务都在相同的代码库下运行。

关于权限失败是什么的任何想法?我们正在做的一件事是创建自定义日志,但即使我们删除了尝试写入不存在的自定义日志的默认发布者,该过程仍然失败。

【问题讨论】:

  • 你能创建一个简短但完整的程序来演示问题(如果只是在测试环境中)?
  • 您的意思是要查看触发失败的代码?
  • 我的意思正是我所说的 - 我想要一个简短但完整的示例,我们可以看到它的每个部分,它在您的测试系统上以同样的方式失败。这样我们就可以看到可能导致它发生的所有事情。
  • 您是否在 DEV 和生产环境中使用相同的用户帐户运行?很难说这里可能发生了什么,但在尝试创建处理程序时,您似乎遇到了安全异常。我不知道您的代码试图访问什么导致了这种情况。在不知道更多信息的情况下,我最好的猜测是权限错误。
  • @JonSkeet 好的,我理解这个请求。由于我们在环境中使用的共享组件的数量,您所要求的内容可能会有点太长,无法在此处重现,而且我必须花费大量时间来让我们的 DBA 安装测试副本设计只是为了失败。现在我认为这与有问题的自定义日志不存在有关,并且服务无法创建它。我们的 DBA 将在今天早上晚些时候创建自定义日志,我希望这能解决问题。

标签: c# service app-config


【解决方案1】:

原来这是一个晦涩难懂的安装问题。

我们用旧的 exe 卸载了服务,并使用 64 位 4.0 框架重新安装,问题就消失了。

【讨论】:

    【解决方案2】:

    它是构建配置中的框架设置

    【讨论】:

      【解决方案3】:

      与您的方案没有直接关系,但如果您在尝试从网络共享运行 .NET 4.0 应用程序时遇到相同的异常,那么您需要安装此修补程序: http://support.microsoft.com/kb/2580188

      【讨论】: