[SharePoint 2007] Déploiement de paramétrage(s) dans le(s) web.config
Il est question dans ce billet de discuter des méthodes de
déploiement de paramétrages dans le fichier web.config d'une application web SharePoint, aussi bien à la création d'une nouvelle application, que dans le cas d'une
modification incrémentale sur des applications existantes.
La méthode la plus "naturelle" consiste à intégrer ces paramétrages dans votre solution SharePoint (WSP). Pour ceux qui ne connaissent pas le principe, voici comment cela fonctionne:
Lors de la création d'une application web, WSS copie le web.config depuis C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG vers le dossier racine de l'application web. Avant de copier ce fichier, WSS vérifie l'existence de fichiers du type webconfig.*.xml dans le dossier CONFIG et fusionne le contenu de ces fichiers avec le web.config.
Exemple de fichier webconfig.*.xml:
<actions>
<add path="configuration/SharePoint/SafeControls">
<SafeControl
Assembly="System.Web, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
Namespace="System.Web.UI.WebControls"
TypeName="*"
Safe="True"/>
</add>
<remove path="configuration/SharePoint/RuntimeFilter"/>
<add path="configuration/SharePoint">
<RuntimeFilter
Assembly="Company.Product, Version=1.0.1000.0,
Culture=neutral, PublickKeyToken=1111111111"
Class="MyRuntTimeFilter",
BuilderUrl="MyBuilderUrl"/>
</add>
</actions>Vous pouvez ensuite packager ce fichier webconfig.*.xml dans votre wsp et modifier le manifest.xml en conséquence:
<Solution xmlns=”http://schemas.microsoft.com/sharepoint/” SolutionId=”GUID”>
<RootFiles>
<RootFile Location=”CONFIG\
webconfig.myname.xml”/>
</RootFiles>
...
</Solution>Mais malheureusement, ce système n'est valable que pour la création d'une nouvelle application web...
Imaginons maintenant, que vous ayez une solution WSP déjà déployée sur plusieurs applications web de votre ferme et que vous ayez besoin de modifier "en masse" des fichiers web.config existants.
Par exemple, une nouvelle webpart à été ajouté à votre solution et vous souhaitez la mettre à disposition sur les sites existants. Vous avez donc peut être besoin de rajouter un tag SafeControl sur plusieurs web.config d'applications existantes.
Quelles sont les solutions qui s'offrent à nous ?
- à la main: Nan je déconnes...
- La commande stsadm.exe -o copyappbincontent permet de copier les fichiers spécifiques aux application du dossier 12\CONFIG vers les dossiers appropriés des applications. Mais attention: toutes les applications (sauf l'administration centrale) sont impactées et il est nécessaire d'effectuer cette opération sur CHACUN des frontaux. De plus, si vous aviez déjà déployé des paramètres avec un fichier webconfig.*.xml, vous risquez de vous retrouver avec des déclarations en double !
- La classe SPWebConfigModification de Microsoft.SharePoint.Administration.dll permet d'écrire des nœuds et des attributs dans le web.config. Vous pouvez donc utiliser cette classe dans un FeatureReceiver pour ajouter le noeud à l'activation et le supprimer à la désactivation.
Exemple d'utilisation de SPWebConfigModification :
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();
- Utiliser le web.config Modification Manager téléchargeable à cette adresse:
http://blog.thekid.me.uk/archive/2007/03/24/web-config-modification-manager-for-sharepoint.aspx
En conclusion, la mise à jour des fichiers de config est une opération délicate qui doit être automatisé mais avec beaucoup de prudence. La solution du
SPWebConfigModification me semble la plus sûre,
à condition de bien tester vos modifications, mais doit être utilisée en complément des fichiers webconfig.*.xml qui serviront toujours en cas de remontée après un crash par exemple.
La discussion est ouverte !
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :