{"id":92,"date":"2010-02-18T16:58:19","date_gmt":"2010-02-18T15:58:19","guid":{"rendered":"http:\/\/www.juergenholz.de\/?p=92"},"modified":"2010-02-18T16:58:19","modified_gmt":"2010-02-18T15:58:19","slug":"web-config-mittels-c-code-manipulieren-spwebconfigmodification","status":"publish","type":"post","link":"https:\/\/www.juergenholz.de\/en\/web-config-mittels-c-code-manipulieren-spwebconfigmodification\/","title":{"rendered":"web.config mittels C#-Code manipulieren (SPWebConfigModification)"},"content":{"rendered":"<p>H\u00e4ufig gibt es die Anforderung eine web.config (oder mehrere auf Zonen verteilt) zu erweitern und Anpassungen im XML vorzunehmen. Typische Anwendungsf\u00e4lle w\u00e4ren:<\/p>\n<ul>\n<li>Hinzuf\u00fcgen von ConnectionStrings<\/li>\n<li>Anpassen von MembershipProvidern<\/li>\n<li>Hinzuf\u00fcgen von SafeControls oder HttpHandlern<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Zur Manipuklation der web.config dient als Basis die Klasse SPWebConfigModification. Diese wird mit entsprechenden XPath-Ausdr\u00fccken versehen und kann so neue Knoten aufnehmen oder bestehende Knoten manipulieren.<br \/>\nWichtige Eigenschaften:<\/p>\n<ul>\n<li>Value &#8211;&gt;Wert des Knotens, der neu gesetzt werden soll in XML-Notation<\/li>\n<li>Path&#8211;&gt;XPath-Ausdruck f\u00fcr die Position, an der der neue Node eingefugt werden soll<\/li>\n<li>Name &#8211;&gt; XPath-Ausdruck identifiziert den Knoten eindeutig, der neu gesetzt werden soll dazu mu\u00df das Attribut EnsureChildNode verwendet werden<\/li>\n<li>\n<div>Type&#8211;&gt;gibt den Typ des Knotens an (SPWebConfigModification.SPWebConfigModificationType)\u00a0und kann folgende Werte annehmen (EnsureAttribute, EnsureChildNode,\u00a0 EnsureSection)<\/div>\n<\/li>\n<\/ul>\n<p>Nach dem Zuweisen der Werte auf das SPWebConfigModification-Objekt, mu\u00df dieses an die\u00a0 Webapplication \u00fcbergeben werden mittels \u00a0webApp.WebConfigModifications.Add(modObjekt) .<br \/>\nJetzt muss die \u00c4nderung mittels Service noch der Farm bekannt gemacht werden webApp.Farm.Services.GetValue&lt;SPWebService&gt;().ApplyWebConfigModifications();<br \/>\nHier bitte Vorsicht bei einem FrontendServer funktioniert das pr\u00e4chtig, bei mehreren Frontendservern muss der Code auf jedem Server ausgef\u00fchrt werden.<\/p>\n<p>Im folgenden Beispiel wird folgender Code\u00a0in die web.config\u00a0einer Webapplikation (und aller Ihrer Zonen)\u00a0 unter dem Knoten &#8220;configuration&#8221; eingef\u00fcgt:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n &lt;connectionStrings&gt;\r\n    &lt;add name=&quot;AspNetSqlProvider&quot; connectionString=&quot;server=THESERVER; database=THEDATABASE; Trusted_Connection=True&quot; \/&gt;\r\n  &lt;\/connectionStrings&gt;\r\n<\/pre>\n<p>Der C# Code sieht folgenderma\u00dfen aus:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Microsoft.SharePoint;\r\nusing Microsoft.SharePoint.Administration;\r\nnamespace ModifyWebConfig_in_Standard_and_Extranet_Zone\r\n{\r\n\u00a0\u00a0\u00a0 class Program\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 static void Main(string&#x5B;] args)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String webAppName=&quot;http:\/localhost:81&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SPWebApplication webApp = new SPSite(webAppName).WebApplication;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Knoten connectionStrings hinzuf\u00fcgen\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String nodeToAdd = @&quot;&lt;connectionStrings\u00a0 \/&gt;&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String xpath = &quot;configuration&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 String xpathnode = &quot;connectionStrings&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 addNodeToWebConfigModification(webApp, nodeToAdd, xpath, xpathnode);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Knoten add f\u00fcr connectionStrings hinzuf\u00fcgen\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nodeToAdd = @&quot;&lt;add name=&quot;&quot;AspNetSqlProvider&quot;&quot; connectionString=&quot;&quot;server=THESERVER; database=THEDATABASE; Trusted_Connection=True&quot;&quot; \/&gt;&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xpath = &quot;configuration\/connectionStrings&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xpathnode = &quot;add&#x5B;@name='AspNetSqlProvider']&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 addNodeToWebConfigModification(webApp, nodeToAdd, xpath, xpathnode);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Update der web.config und der Central Administration mittels WebService\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 webApp.Farm.Services.GetValue&lt;SPWebService&gt;().ApplyWebConfigModifications();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private static void addNodeToWebConfigModification(SPWebApplication webApp,String nodeToAdd, String xpath,String xpathnodename){\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SPWebConfigModification modification = new SPWebConfigModification();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Value = nodeToAdd;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Path = xpath;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Name = xpathnodename;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Owner = typeof(Program).FullName;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Sequence = 0;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 webApp.WebConfigModifications.Add(modification);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n}\r\n\r\n<\/pre>\n<div class=\"juerg-endepost\" style=\"margin-left: auto;margin-right: auto;text-align: center;\" id=\"juerg-2705688956\"><div class=\"juerg-adlabel\">Werbung<\/div><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-4708705370860748\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:inline-block;width:728px;height:90px;\" \ndata-ad-client=\"ca-pub-4708705370860748\" \ndata-ad-slot=\"4810788593\"><\/ins> \n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>H\u00e4ufig gibt es die Anforderung eine web.config (oder mehrere auf Zonen verteilt) zu erweitern und Anpassungen im XML vorzunehmen. Typische Anwendungsf\u00e4lle w\u00e4ren: Hinzuf\u00fcgen von ConnectionStrings Anpassen von MembershipProvidern Hinzuf\u00fcgen von SafeControls oder HttpHandlern etc. Zur Manipuklation der web.config dient als Basis die Klasse SPWebConfigModification. Diese wird mit entsprechenden XPath-Ausdr\u00fccken versehen und kann so neue Knoten&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,29,13],"tags":[30,9,44],"translation":{"provider":"WPGlobus","version":"3.0.0","language":"en","enabled_languages":["de","en"],"languages":{"de":{"title":true,"content":true,"excerpt":false},"en":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/posts\/92"}],"collection":[{"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":21,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/posts\/92\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.juergenholz.de\/en\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}