gpt4 book ai didi

C# WCF 系统.Configuration.ConfigurationErrorsException : Unrecognized element 'ManagedService'

转载 作者:行者123 更新时间:2023-11-30 17:57:58 25 4
gpt4 key购买 nike

在 WCF 应用程序中,我有一些自定义配置类用于 app.config .但是,我从 WCF 服务主机获得以下堆栈跟踪(它尝试在 WCF 服务的构造函数中检索自定义配置):

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Configuration.ConfigurationErrorsException: Unrecognized element 'ManagedService'. (Service.dll.config line 8) at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult) at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) 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 System.Configuration.ConfigurationManager.GetSection(String sectionName) at ManagementService..ctor() in ManagementService.cs:line 42 --- End of inner exception stack trace --- at System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct& signature, RuntimeType declaringType) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.ServiceModel.Description.ServiceDescription.CreateImplementation(Type serviceType) at System.ServiceModel.Description.ServiceDescription.GetService(Type serviceType) at System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2& implementedContracts) at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses) at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses) at Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type, ServiceKind kind) at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info) System.Configuration.ConfigurationErrorsException: Unrecognized element 'ManagedService'. (Service.dll.config line 8) at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult) at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) 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 System.Configuration.ConfigurationManager.GetSection(String sectionName) at ManagementService..ctor() in ManagementService.cs:line 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>MangedServiceCollection继承自 ConfigurationElementCollection

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;
}
}

此集合包含 ManagedService继承自 ConfigurationElement 的 s :

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"]; }
}
}

代码在这个贴子中可能更容易看pastie.org/private/jkiylqsrklpcdbtfdrajq

最佳答案

我无法遵从您的示例,缺少 ServiceParameterCollection... 所以我已经为您准备了我的工作示例。我们开始...

首先让我们创建配置类,注意 AddItemName ConfigurationCollection 参数(我认为这是您的代码中缺少的):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace GP.Solutions.WF.DocumentProvider.Entities.SharePoint
{
/// <summary>
/// Base SharePoint 2010 provider contiguration
/// </summary>
[Serializable]
public class SharePoint2010Settings : ConfigurationSection
{
/// <summary>
/// DocumentStorageRoot
/// </summary>
[ConfigurationProperty("SiteUrl", IsRequired = true, DefaultValue = "")]
public string SiteUrl
{
get { return (string)base["SiteUrl"]; }
set { base["SiteUrl"] = value; }
}

/// <summary>
/// TitleProperty
/// </summary>
[ConfigurationProperty("TitleProperty", IsRequired = true, DefaultValue = "Title")]
public string TitleProperty
{
get { return (string)base["TitleProperty"]; }
set { base["TitleProperty"] = value; }
}

/// <summary>
/// ProvideFileAsLink
/// </summary>
[ConfigurationProperty("ProvideFileAsLink", IsRequired = true, DefaultValue = true)]
public bool ProvideFileAsLink
{
get { return (bool)base["ProvideFileAsLink"]; }
set { base["ProvideFileAsLink"] = value; }
}

/// <summary>
/// DocumentCategories
/// </summary>
[ConfigurationProperty("DocumentCategories")]
public SharePointDocumentCategoryCollection DocumentCategories
{
get { return (SharePointDocumentCategoryCollection)base["DocumentCategories"]; }
set { base["DocumentCategories"] = value; }
}

}

/// <summary>
/// Configuration element that holds SharePointDocumentCategory collection
/// </summary>
[ConfigurationCollection(typeof(SharePointDocumentCategory), AddItemName = "DocumentCategory", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class SharePointDocumentCategoryCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new SharePointDocumentCategory();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((SharePointDocumentCategory)element).CategoryName;
}
}

/// <summary>
/// Configuration element that holds information for specific document category
/// </summary>
[Serializable]
public class SharePointDocumentCategory: ConfigurationElement
{
/// <summary>
/// CategoryName
/// </summary>
[ConfigurationProperty("CategoryName", IsRequired = true, DefaultValue = "")]
public string CategoryName
{
get { return (string)base["CategoryName"]; }
set { base["CategoryName"] = value; }
}

/// <summary>
/// FolderName
/// </summary>
[ConfigurationProperty("FolderName", IsRequired = true, DefaultValue = "")]
public string FolderName
{
get { return (string)base["FolderName"]; }
set { base["FolderName"] = value; }
}


/// <summary>
/// TitleProperty
/// </summary>
[ConfigurationProperty("OverwriteFiles", IsRequired = true, DefaultValue = true)]
public bool OverwriteFiles
{
get { return (bool)base["OverwriteFiles"]; }
set { base["OverwriteFiles"] = value; }
}

/// <summary>
/// DocumentCategories
/// </summary>
[ConfigurationProperty("CategoryFields")]
public SharePointCategoryFieldsCollection CategoryFields
{
get { return (SharePointCategoryFieldsCollection)base["CategoryFields"]; }
set { base["CategoryFields"] = value; }
}

}

/// <summary>
/// Configuration element that holds SharePointDocumentCategory collection
/// </summary>
[ConfigurationCollection(typeof(SharePointDocumentCategory), AddItemName = "CategoryField", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class SharePointCategoryFieldsCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new SharePointCategoryField();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((SharePointCategoryField)element).FieldName;
}
}

/// <summary>
/// Class that determines specific field
/// </summary>
[Serializable]
public class SharePointCategoryField : ConfigurationElement
{
/// <summary>
/// FolderName
/// </summary>
[ConfigurationProperty("FieldName", IsRequired = true, DefaultValue = "")]
public string FieldName
{
get { return (string)base["FieldName"]; }
set { base["FieldName"] = value; }
}
}

}

这是 web.config 部分:

  <configSections>
<sectionGroup name="CustomConfiguration">
<section name="SharePoint2010Section" type="GP.Solutions.WF.DocumentProvider.Entities.SharePoint.SharePoint2010Settings,CustomConfiguration" allowDefinition="Everywhere" allowLocation="true"/>
</sectionGroup>

</configSections>

<CustomConfiguration>

<SharePoint2010Section SiteUrl="http://server" TitleProperty="Title" ProvideFileAsLink="false">
<DocumentCategories>

<DocumentCategory CategoryName="Vhodni računi" FolderName="" OverwriteFiles="true">
<CategoryFields>
<CategoryField FieldName="Datum" />
<CategoryField FieldName="Vrednost" />
</CategoryFields>
</DocumentCategory>

<DocumentCategory CategoryName="Zahtevek za dopust" FolderName="" OverwriteFiles="true">
<CategoryFields>
<CategoryField FieldName="Datum od" />
<CategoryField FieldName="Datum do" />
</CategoryFields>
</DocumentCategory>

</DocumentCategories>
</SharePoint2010Section>
</CustomConfiguration>

关于C# WCF 系统.Configuration.ConfigurationErrorsException : Unrecognized element 'ManagedService' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com