ApplyWebConfigModifications nicht in der Farm arbeiten

stimmen
1

Also, ich versuche, eine Web Application Feature zu implementieren, die die web.config die WebConfigModifications Sammlung mit aktualisiert. Es gibt viele Informationen zu diesem Thema einschließlich aller Fragen tun Sie laufen in so bin ich sehr zuversichtlich, in den Code aber egal was ich versuche, die Konfigurationselemente werden auf dem Web-Config nicht hinzugefügt. Dies funktioniert in der Entwicklung einzelnen Server-Umgebung in Ordnung, aber nicht aktualisiert, in der Farm.

Keine Fehler, keine Angaben Protokoll keine Ereignismeldungen .... nichts deutete auf, warum es nicht aktualisiert werden:

SPWebConfigModification appSettingModification = new SPWebConfigModification ();
appSettingModification.Name = add [@key = \ Key \ ] [@ value = \ Wert \ ];
appSettingModification.Path = configuration / appSettings;
appSettingModification.Owner = Owner;
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;

if (removeModification)
{
app.WebConfigModifications.Remove (appSettingModification);
}
Else
{
app.WebConfigModifications.Add (appSettingModification);
}
App.Update ();
app.Farm.Services.GetValue <SPWebService> () ApplyWebConfigModifications ().

==============================

BEARBEITEN

Ich wollte dies auf einem Vorschlag von drax Basis hinzufügen, um die ApplyWebModifications Methode zu reflektieren. Dieses Verfahren ist auf dem SPWebService, die in dem Namensraum Microsoft.SharePoint.Administration im Microsoft.SharePoint Baugruppe.

Eines der Probleme mit dieser Methode ist, dass alle web.config-Dateien in der Farm aktualisiert werden, auch wenn keine Änderungen tatsächlich angewandt werden. Dies bewirkt, dass die App-Pools auch recycelt werden, wenn Sie den Web-Config zu aktualisieren nicht beabsichtigen. Reflexion zeigt, warum dies geschieht und es ist sehr ärgerlich.

Innerhalb des Verfahrens ist eine kurze foreach-Schleife:

foreach (SPWebApplication Anwendung in this.WebApplications)
{
application.ApplyWebConfigModifications ();
}

Es wird Looping durch jede der Web - Anwendungen und ein Aufruf INTERNE ApplyWebConfigModifications Methode auf den Web - Anwendungsobjekte. Wenn sie nur diese Methode veröffentlicht dann würden wir in der Lage sein , das Verfahren einzeln anrufen , ohne das AppPool Recycling auf Web - Anwendungen zu beeinträchtigen , die nicht durch unser Updates betroffen ist. Ich sag bloß'

Veröffentlicht am 09/12/2008 um 16:53
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Dieses Problem ist Fehler. Ich denke.

SPWebService.ApplyWebConfigModifications()

public void ApplyWebConfigModifications()
{
  if (base.Farm.TimerService.Instances.Count > 1)
  {
    SPWebConfigJobDefinition definition = new SPWebConfigJobDefinition(this);
    definition.Schedule = new SPOneTimeSchedule(DateTime.Now);
    try
    {
      definition.Update();
      return;
    }
    catch (Exception exception)
    {
      if (exception is SPDuplicateObjectException)
      {
        throw new InvalidOperationException(SPResource.GetString("WebconfigModificationAlreadyRunning", new object[0]), exception);
      }
      throw;
    }
  }
  string strMessage = string.Empty;
  **foreach (SPWebApplication application in this.WebApplications)**
  {
    ULS.SendTraceTag(0x38386866, ULSCat.msoulscat_WSS_Topology, ULSTraceLevel.Medium, "Apply web config modifications to web app {0} ", new object[] { application.GetResponseUri(SPUrlZone.Default).ToString() });
    try
    {
      application.ApplyWebConfigModifications();
Beantwortet am 25/01/2011 um 01:44
quelle vom benutzer

stimmen
0

Problem ist propably in Ihrem Anruf von ApplyWebCOnfigModifications () statt:

app.Farm.Services.GetValue () ApplyWebConfigModifications (.);

benutzen:

app.Farm.Servers.GetValue <SPWebService> () ApplyWebConfigModifications ( . );

Der zweite Code ruft tatsächlich Dienst verantwortlich für die Aktualisierung web.config-Dateien.

Nebenbei bemerkt: Dieser Code öffnet tatsächlich alle webconfig Dateien in allen Webapplikationen auf dem Server / Farm installiert :) aber es wird nur Richtigen aktualisieren. Wenn Sie Reflektor verwenden diese Methode zum Scannen finden Sie einige schöne Beispiel für die Verwendung foreach - Schleife sehen :)

Beantwortet am 09/12/2008 um 17:30
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more