2

我正在尝试从我的 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>

任何帮助深表感谢。

巴勃罗

4

3 回答 3

3

我能够通过在相关线程中执行CzechDeveloper所做的事情来解决这个问题:

<clear />

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

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

正如therealsix指出的那样,当我们开始添加虚拟目录时,我们开始看到这些问题。

于 2015-04-08T19:50:36.707 回答
1

假设从我的评论中修复,我看不出您的代码有任何问题 - 使用完全相同的东西(显然,站点属性的值不同)会导致填充部分变量,正如我所期望的那样。

我唯一能想到的是,您要么使用 ConfigurationFile.Getsection 执行其他操作,即尝试将数据合并到您的主要设置中,要么使用 OpenWebConfiguration 的重载来获取您已成功打开的站点从层次结构中的不同区域到您的站点的 web.config - 您是否在 IIS/.NET 中定义了多个应用程序,它们的成员资格设置的值会发生冲突?

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

于 2009-08-27T13:51:48.803 回答
0

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

我可以通过在有问题的行之前添加这个来解决它:

<remove name="MyMembershipProvider"/>
于 2009-08-27T15:35:47.493 回答