ApplyWebConfigModifications nie pracuje w gospodarstwie

głosy
1

Więc staram się wdrożyć funkcję aplikację internetową, która aktualizuje web.config przy użyciu kolekcji WebConfigModifications. Jest wiele informacji o tym w ten sposób wszystkich problemów napotkasz więc jestem bardzo pewny siebie w kodzie ale bez względu na to, co staram elementy konfiguracyjne nie są dodawane do config internetowej. Działa to dobrze w jednolitym środowisku serwera rozwoju, ale nie aktualizuje w gospodarstwie.

Brak błędy, brak informacji dziennika żadne komunikaty o zdarzeniach .... nic nie wskazując, dlaczego nie będzie aktualizować:

SPWebConfigModification appSettingModification = nowy SPWebConfigModification ();
appSettingModification.Name = add [@key = \ klucz \ ] [@ value = \ Wartość \ ];
appSettingModification.Path = konfiguracja / appSettings;
appSettingModification.Owner = Właściciel;
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> ().

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

EDYTOWAĆ

Chciałem dodać do tego na podstawie sugestii przez Drax odzwierciedlać sposób ApplyWebModifications. Metoda ta jest na SPWebService który znajduje się w przestrzeni nazw Microsoft.SharePoint.Administration w zespole Microsoft.SharePoint.

Jednym z problemów związanych z zastosowaniem tej metody jest to, że wszystkie pliki web.config są aktualizowane w gospodarstwie, nawet jeśli żadne modyfikacje są rzeczywiście stosowane. To powoduje, że pule aplikacji mogą być odzyskane nawet jeśli nie zamierzają zaktualizować config internetowej. Odbicie pokazuje, dlaczego tak się dzieje i to jest bardzo denerwujące.

Wewnątrz metody jest krótka pętla foreach:

foreach (zgłoszenie SPWebApplication w this.WebApplications)
{
application.ApplyWebConfigModifications ();
}

Jest zapętlenie przez każdą z aplikacji internetowych i wywołanie WEWNĘTRZNE metodę ApplyWebConfigModifications na obiektach aplikacji internetowych. Jeśli po prostu popełnił ten Metoda publiczna wtedy bylibyśmy w stanie wywołać metodę indywidualnie bez wpływu na recykling aplikacja basenie w aplikacjach internetowych, które nie są dotknięte przez nasze aktualizacji. Tylko mówię'

Utwórz 09/12/2008 o 16:53
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Problem jest prawdopodobnie w swoim wezwaniu ApplyWebCOnfigModifications () zamiast:

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

posługiwać się:

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

Drugi kod faktycznie wywołuje usługę odpowiedzialną za aktualizację plików web.config.

Sidenote: Kod ten będzie faktycznie otworzyć wszystkie pliki webconfig we wszystkich webapplications zainstalowanych na serwerze / farm :) ale będzie aktualizować tylko właściwe. Jeśli użyjesz reflektor zeskanować tę metodę będzie można zobaczyć kilka ciekawych przykład za pomocą pętli foreach :)

Odpowiedział 09/12/2008 o 17:30
źródło użytkownik

głosy
0

Ten problem jest bug. Myślę.

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();
Odpowiedział 25/01/2011 o 01:44
źródło użytkownik

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