2

Я пытаюсь получить некоторые настройки от моего поставщика членства в моем приложении asp.net (так что у меня нет дублировать информацию в разделе AppSettings), но я получаю следующее исключение:Попытка открыть раздел из web.config охватывает ConfigurationErrorsException: запись KEY уже добавлена ​​

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> 

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

Пабло

+0

Не могли бы вы разместить содержимое раздела Config в вопросе? Анонимный, если вам нравится;) –

+0

@ Zhaph не знаю, полезно ли это, но вот оно ... – Pablo

+0

Не следует читать вашу вторую строку: var section = (MembershipSection) configurationManager.GetSection ("system.web/membership") ;? –

ответ

1

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

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

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

+0

Извините, это была опечатка, когда я анонимировал свой xml-код. Декларация поставщика правильна. Мне кажется, что цель метода GetSection заключается не в загрузке содержимого конфигурационного файла, а в его изменении. – Pablo

+0

Ну, это для чтения и записи в файл конфигурации, поэтому он должен работать - также ваша линия для GetSection правильная (согласно моему второму комментарию). Какие аспекты провайдера вы пытаетесь избежать дублирования в AppSettings? –

0

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

я смог обойти его, добавив это право перед строкой в ​​вопросе:

<remove name="MyMembershipProvider"/> 
+0

Да, способ, которым работает WebConfigurationManager, заключается в том, что он объединяет каждый из файлов web.config в структуре папок с того места, где вы его вызывали, назад к корню приложения, а затем в различные web.config и machine.config файлов в папке конфигурации инфраструктуры. –

2

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

<clear /> 

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

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

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