ApplyWebConfigModifications non funziona in Fattoria

voti
1

Quindi, sto cercando di implementare una funzione di un'applicazione Web che aggiorna il web.config utilizzando l'insieme WebConfigModifications. C'è un sacco di informazioni su questa operazione compresi tutti i problemi che si esegue in modo Sono molto fiducioso nel codice ma non importa quello che cerco gli elementi di configurazione non vengono aggiunti alla configurazione web. Questo funziona bene nell'ambiente di sviluppo singolo server, ma non aggiorna in azienda.

Nessun errore, nessuna informazione di log messaggi di evento .... niente punta verso il motivo per cui non verrà aggiornata:

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

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

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

MODIFICARE

Ho voluto aggiungere a questo sulla base di un suggerimento di Drax in modo da riflettere il metodo ApplyWebModifications. Questo metodo è lo SPWebService che è nello spazio dei nomi Microsoft.SharePoint.Administration nell'assemblea Microsoft.SharePoint.

Uno dei problemi con l'utilizzo di questo metodo è che tutti i file web.config vengono aggiornati in azienda, anche se vengono effettivamente applicate senza alcuna modifica. Questo fa sì che le piscine app da riciclare, anche se non si ha intenzione di aggiornare la configurazione web. Riflessione mostra perché questo sta accadendo ed è molto fastidioso.

All'interno del metodo è un breve ciclo foreach:

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

Si scorrendo ciascuna delle applicazioni web e chiamando un INTERNE metodo ApplyWebConfigModifications sugli oggetti di applicazioni web. Se hanno appena fatto questo metodo pubblico allora saremmo in grado di chiamare il metodo individualmente senza influenzare il riciclo del pool di app su applicazioni web che non sono interessati da nostri aggiornamenti. Solo dicendo

È pubblicato 09/12/2008 alle 16:53
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Questo problema è bug. Credo.

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();
Risposto il 25/01/2011 a 01:44
fonte dall'utente

voti
0

problema è stata riordinata nella chiamata di ApplyWebCOnfigModifications () al posto di:

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

uso:

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

Il secondo codice chiama in realtà il servizio responsabile per l'aggiornamento dei file web.config.

Nota a margine: Questo codice sarà effettivamente aprire tutti i file webConfig in tutte le applicazioni web installate sul server di / farm :) ma aggiornerà quelli giusto. Se si intende utilizzare riflettore per eseguire la scansione di questo metodo si vedrà qualche bel esempio di utilizzo ciclo foreach :)

Risposto il 09/12/2008 a 17:30
fonte dall'utente

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