Поделиться через


Практическое руководство. Добавление и удаление параметров 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-файла

Концепции

Работа с файлами Web.config