Попытка открыть раздел из web.config охватывает исключение ConfigurationErrorsException: запись KEY уже добавлена - PullRequest
2 голосов
/ 27 августа 2009

Я пытаюсь получить некоторые настройки от моего поставщика членства в моем приложении 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>

Любая помощь очень ценится.

Pablo

Ответы [ 3 ]

2 голосов
/ 08 апреля 2015

Я смог решить эту проблему, выполнив то, что CzechDeveloper сделал , в связанной теме, с:

<clear />

Важно: Это сработало только для меня, когда я поместил его непосредственно над дублирующим вложенным элементом.

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

Мы также начали видеть эти проблемы, когда начали добавлять виртуальные каталоги , как указывает therealsix .

1 голос
/ 27 августа 2009

Предполагая исправление из моего комментария, я не вижу ничего плохого в вашем коде - использование точно такой же вещи (очевидно, с другим значением свойства сайта) приводит к заполненной переменной раздела, как я и ожидал.

Единственное, о чем я могу думать, это то, что вы либо делаете что-то еще с ConfigurationFile.Getsection, то есть пытаетесь объединить данные с вашим основным параметром, либо используете перегрузку OpenWebConfiguration, которая занимает сайт, который вы удалось открыть файл web.config из другой области в иерархии на вашем сайте - есть ли у вас несколько приложений, определенных в IIS / .NET, которые будут иметь конфликтующие значения для своего параметра членства?

Наконец, не следует ли вам значение DefaultProvider прочитать «MyIntranetMembershipProvider», которое является именем вашего провайдера, а не «IntranetApp», которое является именем приложения (в хранилище данных провайдера).

0 голосов
/ 27 августа 2009

Я только что получил эту же ошибку после копирования моего сайта в виртуальный каталог на том же сайте. Я думаю, что там есть какое-то наследство.

Мне удалось обойти это, добавив это прямо перед рассматриваемой строкой:

<remove name="MyMembershipProvider"/>
...