在一个WCF应用程序中,我有一些自定义配置类可供在
System.Reflection.TargetInvocationException:目标调用的异常已被抛出。---> System.Configuration.ConfigurationErrorsException:无法识别元素“ManagedService”(Service.dll.config第8行)。在System.Configuration.BaseConfigurationRecord.EvaluateOne(String [] keys,SectionInput input,Boolean isTrusted,FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult)中;在System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult,Boolean getLkg,Boolean getRuntimeObject,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSection(String configKey)中;在System.Configuration.ConfigurationManager.GetSection(String sectionName)中;在ManagementService..ctor()的第42行;--- 内部异常堆栈跟踪结束 --- 在System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method,Object [] args,SignatureStruct & signature,RuntimeType declaringType)中;在System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture)
在System.ServiceModel.Description.ServiceDescription.CreateImplementation(Type serviceType)中;在System.ServiceModel.Description.ServiceDescription.GetService(Type serviceType)中;在System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2 & implementedContracts)中;在System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)中;在System.ServiceModel.ServiceHost..ctor(Type serviceType,Uri [] baseAddresses)中;在Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type,ServiceKind kind)中;在Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)中。System.Configuration.ConfigurationErrorsException:无法识别元素“ManagedService”(Service.dll.config第8行)。在System.Configuration.BaseConfigurationRecord.EvaluateOne(String [] keys,SectionInput input,Boolean isTrusted,FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult)中;在System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult,Boolean getLkg,Boolean getRuntimeObject,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSection(String configKey)中;在System.Configuration.ConfigurationManager.GetSection(String sectionName)中;在ManagementService..ctor()的第42行。
基本上,这个WCF服务用于管理在启动时动态加载和启动的其他服务(通过此配置通知)。
正如您从中所看到的,
这个集合包含从
app.config
中使用。然而,我从WCF服务主机得到了以下堆栈跟踪(它试图在WCF服务的构造函数中检索自定义配置):System.Reflection.TargetInvocationException:目标调用的异常已被抛出。---> System.Configuration.ConfigurationErrorsException:无法识别元素“ManagedService”(Service.dll.config第8行)。在System.Configuration.BaseConfigurationRecord.EvaluateOne(String [] keys,SectionInput input,Boolean isTrusted,FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult)中;在System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult,Boolean getLkg,Boolean getRuntimeObject,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSection(String configKey)中;在System.Configuration.ConfigurationManager.GetSection(String sectionName)中;在ManagementService..ctor()的第42行;--- 内部异常堆栈跟踪结束 --- 在System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method,Object [] args,SignatureStruct & signature,RuntimeType declaringType)中;在System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture)
在System.ServiceModel.Description.ServiceDescription.CreateImplementation(Type serviceType)中;在System.ServiceModel.Description.ServiceDescription.GetService(Type serviceType)中;在System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2 & implementedContracts)中;在System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)中;在System.ServiceModel.ServiceHost..ctor(Type serviceType,Uri [] baseAddresses)中;在Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type,ServiceKind kind)中;在Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)中。System.Configuration.ConfigurationErrorsException:无法识别元素“ManagedService”(Service.dll.config第8行)。在System.Configuration.BaseConfigurationRecord.EvaluateOne(String [] keys,SectionInput input,Boolean isTrusted,FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult)中;在System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord,SectionRecord sectionRecord,Object parentResult,Boolean getLkg,Boolean getRuntimeObject,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object & result,Object & resultRuntimeObject)中;在System.Configuration.BaseConfigurationRecord.GetSection(String configKey)中;在System.Configuration.ConfigurationManager.GetSection(String sectionName)中;在ManagementService..ctor()的第42行。
非常抱歉看到这个让人头疼的堆栈跟踪。
我查看了很多关于此错误的教程和其他问题,但是所有的建议或解决方案都没有任何进展。
以下是app.config
的相关部分:
<configSections>
<section name="ManagedServices" type="Service.Configuration.ManagedServicesSection, Service, Version=1.0.0.0, Culture=neutral " allowLocation="true" allowDefinition="Everywhere" restartOnExternalChanges="false" />
</configSections>
<ManagedServices>
<services>
<ManagedService serviceAssembly="Service" serviceType="Service.Runnables.HostManagerRunner" identifier="HostManager" priority="0">
<clear />
</ManagedService>
<ManagedService serviceAssembly="Service" serviceType="Service.Runnables.TimeoutMonitor" identifier="TimeoutMonitor" priority="0">
<add key="timeoutLength" value="30" />
<add key="runInterval" value="30" />
</ManagedService>
</services>
</ManagedServices>
基本上,这个WCF服务用于管理在启动时动态加载和启动的其他服务(通过此配置通知)。
<ManagedServices>
来自 ManagedServicesSection
,后者继承自 ConfigurationSection
。public class ManagedServicesSection : ConfigurationSection
{
[ConfigurationProperty("services", IsDefaultCollection = true)]
public ManagedServiceCollection ServiceCollection
{
get { return (ManagedServiceCollection) base["services"]; }
}
}
正如您从中所看到的,
<services>
是一个继承自ConfigurationElementCollection
的MangedServiceCollection
。public class ManagedServiceCollection : ConfigurationElementCollection
{
public ManagedServiceCollection()
{
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}
public ManagedService this[int index]
{
get { return BaseGet(index) as ManagedService; }
set
{
if (BaseGet(index) != null)
BaseRemoveAt(index);
BaseAdd(index, value);
}
}
public ManagedService this[string name]
{
get { return BaseGet(name) as ManagedService; }
set
{
if (BaseGet(name) != null)
BaseRemove(name);
BaseAdd(value);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new ManagedService();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ManagedService)element).Identifier;
}
}
这个集合包含从
ConfigurationElement
继承的 ManagedService
:public class ManagedService : ConfigurationElement
{
[ConfigurationProperty("serviceAssembly", IsRequired = true)]
public string ServiceAssembly
{
get { return (string) this["serviceAssembly"]; }
set { this["serviceAssembly"] = value; }
}
[ConfigurationProperty("serviceType", DefaultValue = "IRunnable", IsRequired = true)]
public string ServiceType
{
get { return (string) this["serviceType"]; }
set { this["serviceType"] = value; }
}
[ConfigurationProperty("identifier", IsRequired = true, IsKey = true)]
public string Identifier
{
get { return (string) this["identifier"]; }
set { this["identifier"] = value; }
}
[ConfigurationProperty("priority", DefaultValue = 0, IsRequired = false)]
public int Priority
{
get { return (int) this["priority"]; }
set { this["priority"] = value; }
}
[ConfigurationProperty("serviceParameters", IsDefaultCollection = true)]
public ServiceParameterCollection ServiceParameters
{
get { return (ServiceParameterCollection)base["serviceParamters"]; }
}
}
这段代码可以在pastiepastie.org/private/jkiylqsrklpcdbtfdrajq上更容易地查看。