5 votos

ASP.NET la sección de configuración personalizada de la declaración rompe el Administrador de IIS Editor de Configuración

Tengo una simple .RED configuración personalizada componente que permite especificar una configuración personalizada de grupo y sección en mi ASP.NET 2.0 (la web del proyecto objetivos .NET Framework 3.5) de la aplicación web web.config archivo:

En mi web.config I tener las siguientes declaraciones:

<configuration>

  <configSections>
    <sectionGroup 
      name="SimpleConfigGroup"
      type="CustomSettingsLib.SimpleConfigGroup, CustomSettingsLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7a58d3af5d6768c9">
      <section 
        name="SimpleConfigSection"
        type="CustomSettingsLib.SimpleConfigSection, CustomSettingsLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7a58d3af5d6768c9"/>
    </sectionGroup>
  </configSections>

  <SimpleConfigGroup>
    <SimpleConfigSection MySetting="Hello World" />
  </SimpleConfigGroup>

</configuration>

Hay un par de clases que proporcionan acceso a esta sección de configuración personalizada que residen en un proyecto de biblioteca de clases llamado CustomSettingsLib:

SimpleConfigGroup.cs:

using System.Configuration;
namespace CustomSettingsLib
{
  public class SimpleConfigGroup : ConfigurationSectionGroup
  {
    [ConfigurationProperty("SimpleConfigSection")]
    public SimpleConfigSection SimpleConfigSection
    {
      get { return (SimpleConfigSection)this.Sections["SimpleConfigSection"]; }
    }
  }
}

SimpleConfigSection.cs:

using System.Configuration;
namespace CustomSettingsLib
{
  public class SimpleConfigSection : ConfigurationSection
  {
    [ConfigurationProperty("MySetting", IsRequired = false)]
    public string MySetting
    {
      get { return (string)this["MySetting"]; }
    }
  }
}

El código para leer el MySetting valor (Default.aspx.cs):

using System;
using System.Configuration;
using System.Web.Configuration;
using CustomSettingsLib;

namespace WebApplication4
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
      SimpleConfigGroup group = 
              config.GetSectionGroup("SimpleConfigGroup") as SimpleConfigGroup;
      SimpleConfigSection section = group.SimpleConfigSection;
      Response.Write(section.MySetting);
    }
  }
}

Esto funciona muy bien y mi aplicación web puede leer el MySetting valor de mi web.config archivo.

Debido a que estos valores se utilizan en muchas aplicaciones web en Windows 2008 R2+IIS7.5 entonces creé una Configuración de IIS extensión de Esquema para permitir esta opción para ser editado en el Administrador de IIS del Editor de Configuración de la característica en lugar de tener a mano de edición de la web.config archivo.

He añadido una configuración de IIS esquema de archivo de extensión:

%systemroot%\system32\inetsrv\config\schema

<configSchema>
  <sectionSchema name="SimpleConfigGroup">
    <element name="SimpleConfigSection">
      <attribute name="MySetting" 
                 type="string" 
                 validationType="nonEmptyString" />
    </element>
  </sectionSchema>
</configSchema>

Entonces agregué la siguiente definición de la sección a del IIS applicationHost.config archivo en la <configSections> elemento:

<section name="SimpleConfigGroup" 
         overrideModeDefault="Allow" 
         allowDefinition="Everywhere" />

El problema que estoy teniendo es que cuando abro el Administrador de IIS del Editor de Configuración para el sitio:

enter image description here

A continuación, seleccione SimpleConfigGroup de la sección de la lista desplegable que se informa de los siguientes vaga de error:

"Hubo un error al realizar esta operación".
Detalles:
Nombre de archivo: \?\e:\sites\site1\web.config
Error:

Aquí está una captura de pantalla de este error:

enter image description here

Si puedo quitar el .NETO <sectionGroup> declaración desde el sitio de la web.config el archivo se puede editar la configuración personalizada bien mediante el Administrador de IIS del Editor de Configuración. Sin embargo, mi aplicación web no se puede ejecutar porque el <sectionGroup> config información es requerida por la sección de configuración personalizada y para .NET para ser capaces de analizar la web.config archivo.

He intentado añadir el <sectionGroup> a la root machine.config (e incluso la caída de la configuración de montaje en el .NET 2.0 framework assemblies) pero me sale el mismo error. También probé con la firma de la configuración de la asamblea pensando que puede haber un problema de confianza, pero que no ha ayudado.

Lo que me parece extraño es que el de costumbre .NET Framework <configSections> en machine.config no perturbar el Administrador de IIS Configuración de Administrador, ni el .NET 3.5 Sistema.Web.Extensiones <sectionGroup> definiciones en un ASP.NET 2.0 de sitio, por ejemplo, para system.web sin embargo, mi custom config secciones.

¿Por qué es esto? Es un error en el Administrador de IIS Editor de Configuración?

Actualización:

Basada en la de Scott sugerencia he añadido lo siguiente a mi applicationHost.config archivo (dejando el sectionGroup/section declaración en la web.config archivo:

<sectionGroup name="SimpleConfigGroup">
  <section name="SimpleConfigSection" 
           allowDefinition="Everywhere" 
           overrideModeDefault="Allow" />
</sectionGroup>

Esto genera el siguiente error, que es comprensible porque ya está definido en la web.config archivo:

enter image description here


He intentado quitar el sectionGroup/section declaración de la web.config , pero manteniendo el anterior sectionGroup declaración applicationHost. El Administrador de IIS del editor de Configuración ya no muestra el SimpleConfigGroup sección.


Luego traté de esto en applicationHost.config:

<section 
    name="SimpleConfigGroup" 
    allowDefinition="Everywhere" 
    overrideModeDefault="Allow" 
    type="CustomSettingsLib.SimpleConfigGroup, CustomSettingsLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7a58d3af5d6768c9"/>

El Administrador de IIS Configuración del editor de Configuración ahora se puede ver la sección de nuevo sin error, sino porque no hay ninguna declaración de sección en web.config el ASP.NET la aplicación lanza un " no Reconocido de la sección de configuración" de excepción.


También he intentado esto en applicationHost.config:

<sectionGroup 
   name="SimpleConfigGroup" 
   type="CustomSettingsLib.SimpleConfigGroup, CustomSettingsLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7a58d3af5d6768c9">
  <section 
    name="SimpleConfigSection" 
    overrideModeDefault="Allow" 
    allowDefinition="Everywhere"
    type="CustomSettingsLib.SimpleConfigSection, CustomSettingsLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7a58d3af5d6768c9"/>
</sectionGroup>

De nuevo, no dados, ASP.NET lanza un " no Reconocido de la sección de configuración" de la excepción y el Administrador de IIS del Editor de Configuración ya no muestra el SimpleConfigGroup sección.


Progreso:

Regresé a la primera base y reinstalado el web.config sección de configuración de la declaración, de modo que la ASP.NET la aplicación puede leer la configuración propios valores. He eliminado el cliente archivo de esquema desde el IIS esquema de carpetas y revertir applicationHost.config's configSections sección a la configuración de fábrica.

Una de las cosas que me pareció interesante es que el Administrador de IIS configuración del editor expone la system.web ajustes y aunque no hay un archivo de esquema para esto (ASPNET_schema.xml) el esquema de las secciones no son en realidad hace referencia en la applicationHost.config archivo. Esto me lleva a la creencia de que estos archivos o la sectionSchema nombres que se manejan de una manera especial.

Para este fin, me abrió la puerta de la ASPNET_schema.xml archivo y agrega mi definición de esquema:

<sectionSchema name="SimpleConfigGroup">
  <element name="SimpleConfigSection">
    <attribute name="MySetting" 
                     type="string" 
                     validationType="nonEmptyString" />
  </element>
</sectionSchema>

Esto no funciona y SimpleConfigGroup no era visible en el Administrador de IIS del Editor de Configuración. Pero no se producen errores y la ASP.NET la aplicación puede leer todavía es costumbre los valores de la configuración.

He intentado siguiendo las convenciones usadas en la ASPNET_schema.xml archivo de esquema, y añadió esta vez:

<sectionSchema name="SimpleConfigGroup/SimpleConfigSection">
  <attribute name="MySetting" 
             type="string" 
             validationType="nonEmptyString" />
</sectionSchema>

Esto realmente funcionó!:

enter image description here

El ASP.NET la aplicación sigue funcionando y puede leer la sección de configuración personalizada Y puedo editar la sección de configuración personalizada MySetting valor en el Administrador de IIS del Editor de Configuración.

Me enrollan ASPNET_schema.xml a los ajustes de fábrica y trató de recrear el custom SimpleConfigSchema.xml archivo en IIS del esquema de la carpeta utilizando la definición de la misma y esto funciona así.

Esto es también sin la adición de una referencia a la sección de configuración en applicationHost.config.

Yo estoy llegando a la conclusión de que la orientación sobre la extensión del esquema donde tanto el Administrador de IIS del editor de configuración Y ASP.NET necesidad de consumir la misma sección es un poco falso.

56voto

Scott Forsyth - MVP Puntos 12030

Oye Kev. Esto funcionó para mí de inmediato, utilizando sus ejemplos. Aquí es donde he puesto todo:

Ruta de acceso:

%systemroot%\system32\inetsrv\config\schema\simpleconfig.xml

Contenido:

<configSchema>
  <sectionSchema name="SimpleConfigGroup">
    <element name="SimpleConfigSection">
      <attribute name="MySetting" 
                 type="string" 
                 validationType="nonEmptyString" />
    </element>
  </sectionSchema>
</configSchema>

Ruta de acceso:

%systemroot%\system32\inetsrv\config\applicationHost.config (in <configSections> element).

Contenido:

<section name="SimpleConfigGroup" 
         overrideModeDefault="Allow" 
         allowDefinition="Everywhere" />

Ruta de acceso:

Site's web.config

Contenido:

  <SimpleConfigGroup>
    <SimpleConfigSection MySetting="Hello World" />
  </SimpleConfigGroup>

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: