2009-11-20 40 views
5

我得到以下exeption: 「節只能出現每個配置文件一次見的幫助主題爲例外。」節只能在每個配置文件中出現一次!爲什麼?

我的配置文件看起來像這樣

<configSections> 
    <sectionGroup name="point.System"> 
     <section name="singleInstanceCache" 
      type="xyz.Point.System.Configuration.SingleInstanceCache, Point.System" /> 
    </sectionGroup> 
    <sectionGroup name="point.Services"> 
     <sectionGroup name="xServices" type="xyz.Point.Messaging.PointServiceConfiguration.PointServices, Barcap.FIA.Point.Messaging"> 
      <section name="xService" 
       type="xyz.Point.Messaging.PointServiceConfiguration.PointService, Barcap.FIA.Point.Messaging" /> 
     </sectionGroup> 
    </sectionGroup> 
</configSections> 

<point.Services> 
    <xServices> 
     <xService name="Service1" type="IService" > 
      <endpoints> 
       <endpoint aliasName="incoming" endpointName="Subscriber"/> 
       <endpoint aliasName="outgoing" endpointName="Publisher"/> 
      </endpoints> 
     </xService> 
     <xService name="BlobService" type="IPortfolioService" > 
      <endpoints> 
       <endpoint aliasName="incoming" endpointName="Subscriber"/> 
       <endpoint aliasName="outgoing" endpointName="Publisher"/> 
      </endpoints> 
     </xService> 
    </xServices> 
</point.Services> 

這裏是我加載代碼:

public class PointServices : ConfigurationSection 
{ 
    public static PointServices Get() 
    { 
     var t = (PointServices)ConfigurationManager.GetSection("point.Services/xServices"); 

     return null; 
    } 

    //<summary> 
    //Declares a collection element represented in the following configuration sub-section 
    //<singleInstances> <add .../> </singleInstances> 
    //</summary> 
    [ConfigurationProperty("xServices", IsDefaultCollection = true)] 
    [ConfigurationCollection(typeof(PointServices), AddItemName = "xService")] 
    public PointServicesCollection Services 
    { 
     get { return (PointServicesCollection) base["xServices"]; } 
    } 
} 

public class PointService : ConfigurationElement 
{ 
    [ConfigurationProperty("name",IsRequired = true)] 
    public string Name 
    { 
     get { return this["name"].ToString(); } 
    } 

    [ConfigurationProperty("type", IsRequired = true)] 
    public string Type 
    { 
     get { return this["type"].ToString(); } 
    } 

    [ConfigurationProperty("endpoints", IsRequired = false)] 
    [ConfigurationCollection(typeof(EndpointAliasCollection), AddItemName = "endpoint")] 
    public EndpointAliasCollection Endpoints 
    { 
     get { return (EndpointAliasCollection)this["endpoints"]; } 
    } 
} 

如果有,爲什麼我得到這個呃任何想法這很有幫助。

謝謝

回答

13

您正試圖使用​​一個部分組作爲集合,並將部分作爲集合中的項目,而不是它們的目的,因此錯誤。

基本上,您只需要將point.Services定義爲節,因爲它不需要包含任何其他節,然後定義一個集合屬性以包含配置元素。

配置

<configSections> 
    <section name="point.Services" 
     type="xyz.Point.Messaging.PointServiceConfiguration.PointServices, Barcap.FIA.Point.Messaging" /> 
</configSections> 

<point.Services> 
    <xServices> 
     <xService name="Service1" type="IService" > 
      <endpoints> 
       <endpoint aliasName="incoming" endpointName="Subscriber"/> 
       <endpoint aliasName="outgoing" endpointName="Publisher"/> 
      </endpoints> 
     </xService> 
     <xService name="BlobService" type="IPortfolioService" > 
      <endpoints> 
       <endpoint aliasName="incoming" endpointName="Subscriber"/> 
       <endpoint aliasName="outgoing" endpointName="Publisher"/> 
      </endpoints> 
     </xService> 
    </xServices> 
</point.Services> 

然後代碼爲

public class PointServices : ConfigurationSection 
{ 
    public static PointServices Get() 
    { 
     return (PointServices) ConfigurationManager.GetSection("point.Services"); 
    } 

    [ConfigurationProperty("xServices", IsDefaultCollection = true)] 
    [ConfigurationCollection(typeof(PointService), AddItemName = "xService")] 
    public PointServicesCollection Services 
    { 
     get { return (PointServicesCollection) base["xServices"]; } 
    } 
} 

public class PointService : ConfigurationElement 
{ 
    [ConfigurationProperty("name", IsRequired = true)] 
    public string Name 
    { 
     get { return this["name"].ToString(); } 
    } 

    [ConfigurationProperty("type", IsRequired = true)] 
    public string Type 
    { 
     get { return this["type"].ToString(); } 
    } 

    [ConfigurationProperty("endpoints", IsRequired = false)] 
    [ConfigurationCollection(typeof(EndpointAlias), AddItemName = "endpoint")] 
    public EndpointAliasCollection Endpoints 
    { 
     get { return (EndpointAliasCollection) this["endpoints"]; } 
    } 
} 

要打破它:您可以按以下步驟更新代碼

  • PointServices是一個映射到< point.Services>部分的配置節,因此靜態Get()方法反映了這一點
  • PointServices定義了一個集合屬性Services,它是一個PointServiceCollection,其中的項目類型是PointService(NOT PointServices)並且是映射到元素名稱Xservice的
  • PointService元素的元素,而不是部分,再次指出集合屬性屬性定義了項目類型,而不是容器類型

希望有所幫助。

+0

有關,很好的解決方案,正是我所需要的。我只會添加PointServicesCollection類需要從ConfigurationElementCollection繼承的事實。 [這篇文章](http://stackoverflow.com/questions/7380627/unrecognized-element-exception-with-custom-c-sharp-config)也有幫助。 – army 2015-05-06 13:10:32

-1

Point.System在配置文件中位於何處?它可能只是抱怨,因爲0!= 1(對計算機)

+0

不,點系統與它沒有任何關係。這部分工作正常。它與point.services – 2009-11-20 05:26:14

相關問題