尝试从web.config打开一个部分跨越ConfigurationErrorsException:已添加条目KEY

时间:2009-08-27 12:23:45

标签: asp.net web-config configuration-files webconfigurationmanager

我正在尝试从我的asp.net应用程序中的成员资格提供程序中获取一些设置(这样我就不必复制appSettings部分中的信息)但是我得到以下异常:

System.Configuration.ConfigurationErrorsException: The entry 'MyMembershipProvider' has already been added. (C:\Inetpub\intranet-webapp\web.config line 53)

我的代码如下:

var configurationManager = WebConfigurationManager.OpenWebConfiguration("/", "IntranetWebapp");
var section = (MembershipSection) configurationManager.GetSection("system.web/membership");

第二行引发了异常。我发现它完全奇怪,因为我不想在配置文件中添加任何新信息。相反,我只是想检索它。

我的配置部分的内容:

<membership defaultProvider="IntranetApp">
  <providers>
    <add applicationName="IntranetApp"
         enableSearchMethods="true"
         connectionStringName="IntranetConnectionString"
         connectionUsername="CN=username,OU=Service Accounts,OU=Users,OU=CompanyName,DC=CompanyName,DC=com"
         connectionPassword="********"
         name="MyIntranetMembershipProvider"
         type="System.Web.Security.ActiveDirectoryMembershipProvider" />
  </providers>
</membership>

非常感谢任何帮助。

巴勃罗

3 个答案:

答案 0 :(得分:2)

我能够通过在相关主题中执行CzechDeveloper did来解决此问题:

<clear />

重要提示:当我将它直接放在重复的嵌套元素上方时,这对我有用。

<sso>
  <stores>
    <clear />
    <store name="Store1" apiKey="abcd" />
    <store name="Store2" apiKey="efgh" />
  </stores>
</sso>

当我们开始添加virtual directories作为 therealsix 指出时,我们开始看到这些问题。

答案 1 :(得分:1)

假设我的评论得到修复,我看不出你的代码有什么问题 - 使用完全相同的东西(显然有不同的网站属性值)导致填充的部分变量,正如我所期望的那样。 / p>

我唯一能想到的是你要么在ConfigurationFile.Getsection上做其他事情,那就是尝试将数据合并到你的主设置中,或者使用OpenWebConfiguration的重载来获取你所拥有的网站设法从层次结构中的不同区域打开web.config进入您的站点 - 您是否在IIS / .NET中定义了多个应用程序,这些应用程序的成员资格设置会有相互冲突的值?

最后,你不应该将DefaultProvider值读为“MyIntranetMembershipProvider”,这是你的提供者的名字,而不是“IntranetApp”,它是应用程序的名称(在提供者的数据存储区中)。

答案 2 :(得分:0)

在将我的网站复制到同一网站下的虚拟目录后,我遇到了同样的错误。我想那里有一些遗产。

我能够通过在相关行之前添加此权利来解决这个问题:

<remove name="MyMembershipProvider"/>