Procedimiento para agregar y quitar la configuración de Web.config mediante programación

Última modificación: lunes, 27 de diciembre de 2010

Hace referencia a: SharePoint Foundation 2010

En Microsoft SharePoint Foundation, una forma de modificar la configuración de web.config es usar la clase SPWebConfigModification del espacio de nombres Microsoft.SharePoint.Administration, que permite registrar las entidades en forma dinámica. Estas modificaciones son persistentes en la base de datos de configuración donde funcionan como un tipo de web.config virtual que sirve efectivamente como la capa final de la pila de archivos .config para la aplicación web de SharePoint Foundation. Los cambios surtirán efecto cuando se llame al método SPWebService.ApplyWebConfigModifications.

SugerenciaSugerencia

A veces, estos cambios también se escriben en el archivo físico web.config, pero SharePoint Foundation no es coherente en las modificaciones de escritura del archivo físico, por lo que ese archivo no siempre reflejará cada objeto SPWebConfigModification aplicado. Para solucionar el problema de modificaciones de web.config, examine las propiedades SPWebApplication.WebConfigModifications y SPWebService.WebConfigModifications, así como el archivo físico.

Nota

El código que llama a ApplyWebConfigModifications funciona únicamente si se ejecuta en el contexto de usuario de un administrador en el servidor front-end web.

Nota

Para obtener información acerca de un segundo método para extender archivos web.config, consulte Procedimiento para crear un archivo adicional .config.

Ejemplo: agregar un parámetro de configuración

El siguiente ejemplo muestra cómo se usa la clase SPWebConfigModification para registrar un ensamblado personalizado.

Dim service As SPWebService = SPWebService.ContentService

Dim myModification As New SPWebConfigModification()
myModification.Path = "configuration/SharePoint/SafeControls"
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']"
myModification.Sequence = 0
myModification.Owner = "User Name"
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />"
service.WebConfigModifications.Add(myModification)

'Call Update and ApplyWebConfigModifications to save changes
service.Update()
service.ApplyWebConfigModifications()
SPWebService service = SPWebService.ContentService;

SPWebConfigModification myModification = new SPWebConfigModification();
myModification.Path = "configuration/SharePoint/SafeControls";
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']";
myModification.Sequence = 0;
myModification.Owner = "User Name";
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />";
service.WebConfigModifications.Add(myModification);
 
/*Call Update and ApplyWebConfigModifications to save changes*/ 
service.Update();
service.ApplyWebConfigModifications();

En el ejemplo, la propiedad Name contiene una instrucción XPath que identifica el nodo de forma exclusiva, lo que asegura que no se agregan duplicados del nodo al archivo.

Una llamada al método ApplyWebConfigModifications programa un trabajo del temporizador para implementar los cambios en todo el conjunto o granja de servidores. Para aplicar una modificación de web.config a una aplicación web específica, agregue la modificación a la colección de modificaciones de web.config de la aplicación web (WebConfigModifications). Por ejemplo, puede usar oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification) para agregar una modificación de web.config a la aplicación web primaria de un sitio web específico. Debe llamar a ApplyWebConfigModifications incluso si agrega una modificación de web.config a una sola aplicación web.

Quitar parámetros de configuración

El código para quitar un parámetro de configuración es similar, excepto que su modificación es para quitar un parámetro de configuración. En el siguiente ejemplo se muestran los procedimientos para quitar un parámetro de configuración. Tenga en cuenta que el código debe llamar a ApplyWebConfigModifications

SPWebConfigModification configModFound = null;
SPWebApplication webApplication = SPWebApplication.Lookup(new Uri("https://localhost/"));
Collection<SPWebConfigModification> modsCollection = webApplication.WebConfigModifications;

// Find the most recent modification of a specified owner
int modsCount1 = modsCollection.Count;
for (int i = modsCount1 - 1; i > -1; i--)
{
    if (modsCollection[i].Owner == "User Name")
    {
        configModFound = modsCollection[i];
    }
}

// Remove it and save the change to the configuration database  
modsCollection.Remove(configModFound);
webApplication.Update();

// Reapply all the configuration modifications
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();

Vea también

Tareas

Procedimiento para crear un archivo adicional .config

Conceptos

Trabajo con archivos Web.config