Häufig gibt es die Anforderung eine web.config (oder mehrere auf Zonen verteilt) zu erweitern und Anpassungen im XML vorzunehmen. Typische Anwendungsfälle wären:

  • Hinzufügen von ConnectionStrings
  • Anpassen von MembershipProvidern
  • Hinzufügen von SafeControls oder HttpHandlern
  • etc.

Zur Manipuklation der web.config dient als Basis die Klasse SPWebConfigModification. Diese wird mit entsprechenden XPath-Ausdrücken versehen und kann so neue Knoten aufnehmen oder bestehende Knoten manipulieren.
Wichtige Eigenschaften:

  • Value –>Wert des Knotens, der neu gesetzt werden soll in XML-Notation
  • Path–>XPath-Ausdruck für die Position, an der der neue Node eingefugt werden soll
  • Name –> XPath-Ausdruck identifiziert den Knoten eindeutig, der neu gesetzt werden soll dazu muß das Attribut EnsureChildNode verwendet werden
  • Type–>gibt den Typ des Knotens an (SPWebConfigModification.SPWebConfigModificationType) und kann folgende Werte annehmen (EnsureAttribute, EnsureChildNode,  EnsureSection)

Nach dem Zuweisen der Werte auf das SPWebConfigModification-Objekt, muß dieses an die  Webapplication übergeben werden mittels  webApp.WebConfigModifications.Add(modObjekt) .
Jetzt muss die Änderung mittels Service noch der Farm bekannt gemacht werden webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
Hier bitte Vorsicht bei einem FrontendServer funktioniert das prächtig, bei mehreren Frontendservern muss der Code auf jedem Server ausgeführt werden.

Im folgenden Beispiel wird folgender Code in die web.config einer Webapplikation (und aller Ihrer Zonen)  unter dem Knoten “configuration” eingefügt:

 <connectionStrings>
    <add name="AspNetSqlProvider" connectionString="server=THESERVER; database=THEDATABASE; Trusted_Connection=True" />
  </connectionStrings>

Der C# Code sieht folgendermaßen aus:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace ModifyWebConfig_in_Standard_and_Extranet_Zone
{
    class Program
    {
        static void Main(string[] args)
        {
            String webAppName="http:/localhost:81";
            SPWebApplication webApp = new SPSite(webAppName).WebApplication;

            //Knoten connectionStrings hinzufügen
            String nodeToAdd = @"<connectionStrings  />";
            String xpath = "configuration";
            String xpathnode = "connectionStrings";
            addNodeToWebConfigModification(webApp, nodeToAdd, xpath, xpathnode);

            //Knoten add für connectionStrings hinzufügen
            nodeToAdd = @"<add name=""AspNetSqlProvider"" connectionString=""server=THESERVER; database=THEDATABASE; Trusted_Connection=True"" />";
            xpath = "configuration/connectionStrings";
            xpathnode = "add[@name='AspNetSqlProvider']";
            addNodeToWebConfigModification(webApp, nodeToAdd, xpath, xpathnode);

            //Update der web.config und der Central Administration mittels WebService
            webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
        }
        private static void addNodeToWebConfigModification(SPWebApplication webApp,String nodeToAdd, String xpath,String xpathnodename){
            SPWebConfigModification modification = new SPWebConfigModification();
            modification.Value = nodeToAdd;
            modification.Path = xpath;
            modification.Name = xpathnodename;
            modification.Owner = typeof(Program).FullName;
            modification.Sequence = 0;
            modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
            webApp.WebConfigModifications.Add(modification);
            }

        }
}

Werbung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.