Практическое руководство. Добавление и удаление параметров Web.config программным способом
Дата последнего изменения: 27 декабря 2010 г.
Применимо к: SharePoint Foundation 2010
В Microsoft SharePoint Foundation одним из способов изменения параметров web.config является использование класса SPWebConfigModification пространства имен Microsoft.SharePoint.Administration, который позволяет динамически регистрировать сущности. Эти изменения сохраняются в базе данных конфигураций, где они функционируют в виде виртуального файла web.config, который выступает в роли последнего уровня стека файлов .config для веб-приложения SharePoint Foundation. Изменения вступают в силу при вызове метода SPWebService.ApplyWebConfigModifications.
Совет |
---|
Иногда такие изменения также записываются в физический файл web.config, однако SharePoint Foundation не обеспечивает согласованности при записи изменений в физический файл, поэтому в файле не всегда будут отражаться все примененные объекты SPWebConfigModification. При поиске неполадок, связанных с изменениями web.config, проверьте значения свойств SPWebApplication.WebConfigModifications и SPWebService.WebConfigModifications, а также соответствующий физический файл. |
Примечание |
---|
Код, вызывающий ApplyWebConfigModifications, работает только при запуске в пользовательском контексте администратора на интерфейсном веб-сервере. |
Примечание |
---|
Сведения о втором способе расширения файлов web.config см. в разделе Создание дополнительного CONFIG-файла. |
Пример: добавление параметра
В следующем примере показано использование класса SPWebConfigModification для регистрации пользовательской сборки.
Dim service As SPWebService = SPWebService.ContentService
Dim myModification As New SPWebConfigModification()
myModification.Path = "configuration/SharePoint/SafeControls"
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']"
myModification.Sequence = 0
myModification.Owner = "User Name"
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />"
service.WebConfigModifications.Add(myModification)
'Call Update and ApplyWebConfigModifications to save changes
service.Update()
service.ApplyWebConfigModifications()
SPWebService service = SPWebService.ContentService;
SPWebConfigModification myModification = new SPWebConfigModification();
myModification.Path = "configuration/SharePoint/SafeControls";
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']";
myModification.Sequence = 0;
myModification.Owner = "User Name";
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />";
service.WebConfigModifications.Add(myModification);
/*Call Update and ApplyWebConfigModifications to save changes*/
service.Update();
service.ApplyWebConfigModifications();
В примере свойство Name содержит оператор XPath, которое однозначно идентифицирует узел, что исключает добавление в файл дубликатов узлов.
Вызов метода ApplyWebConfigModifications планирует задание таймера для развертывания изменений в ферме серверов. Чтобы применить изменение web.config к определенному веб-приложению, добавьте изменение в коллекцию изменений web.config для веб-приложения (WebConfigModifications). Например, можно использовать oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification), чтобы добавить изменение web.config в родительское веб-приложение определенного веб-сайта. Необходимо вызвать ApplyWebConfigModifications, даже если изменение web.config добавляется в единственное веб-приложение.
Удаление параметров конфигурации
Код для удаления параметра конфигурации аналогичен за исключением того, что изменением является удаление параметра конфигурации. В следующем примере показано удаление параметра конфигурации. Обратите внимание, что в коде все равно необходимо вызывать ApplyWebConfigModifications
SPWebConfigModification configModFound = null;
SPWebApplication webApplication = SPWebApplication.Lookup(new Uri("https://localhost/"));
Collection<SPWebConfigModification> modsCollection = webApplication.WebConfigModifications;
// Find the most recent modification of a specified owner
int modsCount1 = modsCollection.Count;
for (int i = modsCount1 - 1; i > -1; i--)
{
if (modsCollection[i].Owner == "User Name")
{
configModFound = modsCollection[i];
}
}
// Remove it and save the change to the configuration database
modsCollection.Remove(configModFound);
webApplication.Update();
// Reapply all the configuration modifications
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
См. также
Задачи
Создание дополнительного CONFIG-файла