2011-09-17 116 views
35

Creé un sitio web asp.net y lo publiqué en iis 7. Eliminé la opción de sitio web predeterminada en iis 7 y creó el nuevo sitio web en el iis 7. Al hacer clic en el documento predeterminado, recibí el error "Error al agregar una entrada de colección duplicada de tipo agregar con el atributo de clave único 'valor' establecido en index.aspx". Usé el siguiente código en mi archivo web.config.cómo solucionarlo Error no se puede agregar una entrada de colección duplicada de tipo agregar con el atributo de clave único 'valor' en iis 7

<?xml version="1.0"?><configuration> 
<configSections> 
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
      <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
       <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> 
       <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      </sectionGroup> 
     </sectionGroup> 
    </sectionGroup> 
</configSections> 
<appSettings/> 
<connectionStrings/> 
<system.web> 
    <!-- 
     Set compilation debug="true" to insert debugging 
     symbols into the compiled page. Because this 
     affects performance, set this value to true only 
     during development. 
    --> 
    <compilation debug="true"> 
     <assemblies> 
      <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
      <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
      <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 

      <add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
      <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies> 
    </compilation> 
    <!-- 
     The <authentication> section enables configuration 
     of the security authentication mode used by 
     ASP.NET to identify an incoming user. 
    --> 
    <authentication mode="Windows"/> 
    <!-- 
     The <customErrors> section enables configuration 
     of what to do if/when an unhandled error occurs 
     during the execution of a request. Specifically, 
     it enables developers to configure html error pages 
     to be displayed in place of a error stack trace. 

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> 
     <error statusCode="403" redirect="NoAccess.htm" /> 
     <error statusCode="404" redirect="FileNotFound.htm" /> 
    </customErrors> 
    --> 
    <pages> 
     <controls> 
      <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </controls> 
    </pages> 
    <httpHandlers> 
     <remove verb="*" path="*.asmx"/> 
     <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
    </httpHandlers> 
    <httpModules> 
     <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </httpModules> 
</system.web> 
<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
      <providerOption name="CompilerVersion" value="v3.5"/> 
      <providerOption name="WarnAsError" value="false"/> 
     </compiler> 
    </compilers> 
</system.codedom> 
<!-- 
    The system.webServer section is required for running ASP.NET AJAX under Internet 
    Information Services 7.0. It is not necessary for previous version of IIS. 
--> 
<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules> 
     <remove name="ScriptModule"/> 
     <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </modules> 
    <handlers> 
     <remove name="WebServiceHandlerFactory-Integrated"/> 
     <remove name="ScriptHandlerFactory"/> 
     <remove name="ScriptHandlerFactoryAppServices"/> 
     <remove name="ScriptResource"/> 
     <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </handlers> 
<defaultDocument> 
    <files> 
    <remove value="default.aspx" /> 
    <remove value="index.html" /> 
    <remove value="iisstart.htm" /> 
    <remove value="index.htm" /> 
    <remove value="Default.asp" /> 
    <remove value="Default.htm" /> 
    <add value="index.aspx" /> 
    </files> 
</defaultDocument> 
<security> 
    <requestFiltering> 
    <requestLimits maxQueryString="5120"/> 
    </requestFiltering> 
</security> 
</system.webServer> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/> 
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/> 
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Puede alguien capaz de ayudar a su voluntad que significa realmente útil para mi proyecto. Gracias ..

+1

Parece que su archivo de configuración tiene algún error, elimine las entradas sospechosas una por una hasta que funcione. Algunas entradas tienen el mismo valor en un campo que se supone que es único, las entradas sospechosas son aquellas que comienzan con

Respuesta

26

IIS7 define una sección defaultDocument en sus archivos de configuración que se pueden encontrar en la carpeta% windir% \ System32 \ Inetsrv \ Config. Lo más probable es que el archivo index.aspx ya esté definido como un documento predeterminado en uno de los archivos de configuración de IIS7 y lo esté agregando de nuevo en su web.config.

sospecho que la eliminación de la línea <add value="index.aspx" />

de la sección de archivos/defaultDocument solucionará su problema.

La sección defaultDocument de su configuración se verá así:

<defaultDocument> 
    <files> 
    <remove value="default.aspx" /> 
    <remove value="index.html" /> 
    <remove value="iisstart.htm" /> 
    <remove value="index.htm" /> 
    <remove value="Default.asp" /> 
    <remove value="Default.htm" /> 
    </files> 
</defaultDocument> 

Tenga en cuenta que index.aspx seguirá apareciendo en la lista de documentos por defecto en su sitio en el administrador de IIS.

Para obtener más información acerca de la configuración de IIS7, haga clic en here.

+8

. Para estar seguro, debe tener seguido de . De esta forma, si "index.aspx" ya se ha agregado a un nivel superior, no obtendrá el error "No se puede agregar una entrada de recopilación duplicada". Parece extraño que el elemento no se comporte como un "upsert" --- add si la entrada aún no existe. Pero así es. –

16

El escenario ideal es tener <add value="default.aspx" /> en la configuración para que la aplicación se pueda implementar en cualquier servidor sin tener que volver a configurarlo. En mi humilde opinión, creo que la implementación dentro de IIS es pobre.

Hemos utilizado lo siguiente para hacer nuestra configuración por defecto del documento más robusto y como resultado, más amigable con SEO mediante el uso de URL canónica:

<configuration> 
    <system.webServer> 
    <defaultDocument> 
     <files> 
     <remove value="default.aspx" /> 
     <add value="default.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 
</configuration> 

funciona bien para nosotros.

0

Recibí el mismo error y cuando, sin saberlo, eliminé todas las páginas predeterminadas del DefaultAppPool.

Resolución

que han hecho clic en el DefaultAppPool y ha abierto el documento predeterminado. A continuación, hizo clic en el enlace Revertir a principal en el panel Acciones. Los documentos predeterminados han llegado nuevamente y, por lo tanto, resuelve el problema. No estoy seguro de que esta sea la mejor manera, pero este fue el error que acabo de conocer y espero compartir con ustedes. Espero que esto pueda ayudar a alguien.

6

Eliminar elemento debe eliminar dichos errores. La razón detrás de esto es la configuración heredada. Su aplicación heredará algunas configuraciones del archivo de configuración de su padre y de los archivos de configuración de la máquina (servidor).
Puede eliminar esos duplicados con la etiqueta eliminar antes de agregarlos o hacer que estas etiquetas no sean heredables en los archivos de configuración de nivel superior.

4

Solo tenga en cuenta lo siguiente.

En IIS si tiene una carpeta, por ejemplo, llamada Páginas con varios sitios web en ella. El sitio web heredará la configuración del archivo web.config del directorio principal. Por lo tanto, incluso si la página de la carpeta (en este ejemplo, Páginas) no es un sitio web sino que contiene un archivo web.config, todos los sitios web enumerados dentro heredarán la configuración.

11

Todo lo que necesita es una etiqueta <clear />. Aquí hay un ejemplo:

<configuration> 
    <system.webServer> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="default.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 
</configuration> 
+0

Este problema me sucedió cuando edité Management >> Config Editor para establecer windowsauthentication en true y agregué algunos proveedores. Por algún motivo, no estaba viendo la opción windowsauthentication que aparece en la autenticación IIS >>. Luego descubrí que tenía que activar windowsauthentication en mi servidor web. Lo hice y, por supuesto, la opción aparece en la autenticación IIS >>. Así que sentí que ya no necesitaba configurar esto en Management >> Config Editor ya que mis sitios web.config lo harían por mí. Entonces obtuve este error. Usar clear en mis sitios web.config funcionó, pero creo que no debería tener que hacer eso ... – ozzy432836

+0

Esto funcionó como un encanto durante la migración a un nuevo IIS 10 – Yasskier

Cuestiones relacionadas