ApplyWebConfigModifications no funciona en la granja

votos
1

Por lo tanto, estoy intentando implementar una función de aplicación web que actualice el web.config usando la colección WebConfigModifications. Hay mucha información sobre cómo hacer esto, incluidos todos los problemas que se encuentran, así que tengo mucha confianza en el código, pero no importa lo que intento, los elementos de configuración no se agregan a la configuración web. Esto funciona bien en el entorno de desarrollo de servidor único pero no se actualiza en la Granja.

Sin errores, sin información de registro, sin mensajes de eventos ... nada que indique por qué no se actualizará:

SPWebConfigModification appSettingModification = new SPWebConfigModification ();
appSettingModification.Name = add [@key = \ Key \ ] [@ value = \ Value \ ];
appSettingModification.Path = configuración / appSettings;
appSettingModification.Owner = Propietario;
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> ().

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

EDITAR

Quería agregar a esto basándome en una sugerencia de drax para reflejar el método ApplyWebModifications. Este método está en SPWebService que se encuentra en el espacio de nombres de Microsoft.SharePoint.Administration en el ensamblado Microsoft.SharePoint.

Uno de los problemas con el uso de este método es que todos los archivos web.config se actualizan en la granja incluso si no se están aplicando modificaciones. Esto hace que los grupos de aplicaciones se reciclen incluso si no tiene la intención de actualizar la configuración web. La reflexión muestra por qué sucede esto y es muy molesto.

Dentro del método hay un breve ciclo foreach:

foreach (aplicación SPWebApplication en this.WebApplications)
{
application.ApplyWebConfigModifications ();
}

Está recorriendo cada una de las aplicaciones web y llamando a un método INTERNAL ApplyWebConfigModifications en los objetos de la aplicación web. Si acabaran de hacer público este método, podríamos llamar al método de forma individual sin afectar el reciclaje del grupo de aplicaciones en aplicaciones web que no se vean afectadas por nuestras actualizaciones. Sólo digo'

Publicado el 09/12/2008 a las 16:53
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Este problema es error. Creo.

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();
Respondida el 25/01/2011 a las 01:44
fuente por usuario

votos
0

el problema es propably en su llamada de ApplyWebCOnfigModifications () en vez de:

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

utilizar:

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

El segundo código realmente llama al servicio responsable de actualizar los archivos web.config.

Nota: Este código realmente abrirá todos los archivos webconfig en todas las aplicaciones web instaladas en el servidor / granja :) pero actualizará los correctos. Si va a utilizar el reflector para escanear este método, verá un buen ejemplo de cómo usar foreach loop :)

Respondida el 09/12/2008 a las 17:30
fuente por usuario

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