ApplyWebConfigModifications не работает в ферме

голоса
1

Таким образом, я пытаюсь развернуть функцию веб-приложений, который обновляет web.config с помощью коллекции WebConfigModifications. Существует много информации о этом, включая все вопросы, с которыми вы сталкиваетесь, так что я очень уверен в коде, но независимо от того, что я пытаюсь конфигурационные элементы не добавляются в веб-конфигурации. Это прекрасно работает в разработке единой среде сервера, но не обновляется в ферме.

Нет ошибок, нет информации журнала нет сообщений о событиях .... ничего не указывая на почему он не будет обновляться:

SPWebConfigModification appSettingModification = новый SPWebConfigModification ();
appSettingModification.Name = добавить [@key = \ Key \ ] [@ значение = \ Значение \ ];
appSettingModification.Path = конфигурации / AppSettings;
appSettingModification.Owner = Владелец;
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;

если (removeModification)
{
app.WebConfigModifications.Remove (appSettingModification);
}
Иначе
{
app.WebConfigModifications.Add (appSettingModification);
}
App.Update ();
app.Farm.Services.GetValue <SPWebService> ().

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

РЕДАКТИРОВАТЬ

Я хотел бы добавить к этому на основе предложений по Драке, чтобы отразить метод ApplyWebModifications. Этот метод на SPWebService, который находится в пространстве имен Microsoft.SharePoint.Administration в сборке Microsoft.SharePoint.

Одна из проблем, с помощью этого метода является то, что все файлы web.config обновляются на ферме, даже если никаких изменений фактически не применяются. Это приводит к тому, пулы приложений будет перезапущен, даже если вы не собираетесь обновлять веб-конфигурации. Отражение показывает, почему это происходит, и это очень раздражает.

Внутри метода является коротким циклом Еогеаспа:

Еогеасп (приложение SPWebApplication в this.WebApplications)
{
application.ApplyWebConfigModifications ();
}

Это цикл по каждому из веб - приложений и вызове ВНУТРЕННИЕ метод ApplyWebConfigModifications на объекты веб - приложений. Если они только что сделали этот метод общественности , то мы могли бы вызвать метод в отдельности , не влияя на рециркуляцию приложение пула на веб - приложений, которые не влияют на наши обновления. Просто говорю'

Задан 09/12/2008 в 16:53
источник пользователем
На других языках...                            


2 ответов

голоса
0

Эта проблема является ошибкой. Я думаю.

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();
Ответил 25/01/2011 в 01:44
источник пользователем

голоса
0

Проблема в том, Propably в вашем вызове ApplyWebCOnfigModifications () вместо того, чтобы:

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

использовать:

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

Второй код на самом деле вызывает службу, ответственную за обновление файлов web.config.

Sidenote: Этот код будет фактически открыть все файлы WebConfig во всех webapplications , установленного на сервере / ферме :) но это будет обновлять только правильные. Если вы будете использовать отражатель , чтобы просканировать этот метод , вы увидите некоторые хороший пример использования цикла Еогеасп :)

Ответил 09/12/2008 в 17:30
источник пользователем

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