Итак, я пытаюсь развернуть функцию веб-приложения, которая обновляет web.config с помощью коллекции WebConfigModifications. Существует много информации об этом, включая все проблемы, с которыми вы сталкиваетесь, поэтому я очень уверен в коде, но независимо от того, что я пытаюсь, элементы конфигурации не добавляются в веб-конфигурацию. Это отлично работает в среде разработки с одним сервером, но не обновляется в Ферме.ApplyWebConfigModifications не работает в ферме
ошибок, нет информации в журнале нет сообщений о событиях .... ничего не указывать в сторону, почему она не будет обновляться:
SPWebConfigModification appSettingModification = новый SPWebConfigModification();
appSettingModification.Name = "Добавить [@key = \" Key \ "] [@ value = \" Value \ "]";
appSettingModification.Path = "configuration/appSettings";
appSettingModification.Owner = "Owner";
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;
, если (removeModification)
{
app.WebConfigModifications.Remove (appSettingModification);
}
еще
{
app.WebConfigModifications.Add (appSettingModification);
}
приложение.Обновление();
app.Farm.Services.GetValue <SPWebService>() .ApplyWebConfigModifications();
==============================
EDIT
Я хотел бы добавить к этому на основе предложения drax, чтобы отразить метод ApplyWebModifications. Этот метод находится в SPWebService, который находится в пространстве имен Microsoft.SharePoint.Administration в сборке Microsoft.SharePoint.
Одна из проблем с использованием этого метода заключается в том, что все файлы web.config обновляются в ферме, даже если модификации не применяются. Это приводит к повторному использованию пулов приложений, даже если вы не собираетесь обновлять веб-конфигурацию. Отражение показывает, почему это происходит, и это очень раздражает.
Внутри метода является коротким циклом Еогеаспа:
Еогеаспа (приложение SPWebApplication в this.WebApplications)
{
application.ApplyWebConfigModifications();
}
Это цикл по каждому из веб-приложений и вызова метода ВНУТРЕННИЕ ApplyWebConfigModifications на объекты веб-приложений. Если они просто сделали этот метод общедоступным, мы могли бы вызвать метод индивидуально, не затрагивая утилиту пула приложений в веб-приложениях, на которые не влияют наши обновления.. Просто говорю
FYI, вы можете вызвать внутренние, защищенные и приватные методы, используя API-интерфейсы .NET Reflection. Прошло некоторое время с тех пор, как я должен был это сделать, но вот что произошло с быстрым поиском google [http://breakingdotnet.blogspot.com/2010/10/invoke-private-internal-method-with.html] (http://breakingdotnet.blogspot.com/2010/10/invoke-private-internal-method-with.html) – BrainSlugs83 2011-09-16 21:29:19