Это вопрос к гуру WSS / SharePoint.
Рассмотрим следующий сценарий: у меня есть веб-служба ASP.Net, которая связывает нашу корпоративную систему CRM и интрасеть на основе WSS. Я пытаюсь предоставить новое семейство сайтов WSS при каждом добавлении нового клиента в систему CRM. Чтобы сделать это, мне нужно программно добавить управляемый путь в новое семейство сайтов. Я знаю, что это возможно с помощью объектной модели, но когда я пробую это в моем собственном веб-сервисе, это не удается. Пример кода ниже:
Dim _ClientSiteUrl As String = "http://myintranet/clients/sampleclient"
Using _RootWeb As SPSite = New SPSite("http://myintranet")
Dim _ManagedPaths As SPPrefixCollection = _RootWeb.WebApplication.Prefixes
If Not (_ManagedPaths.Contains(_ClientSiteUrl)) Then
_ManagedPaths.Add(_ClientSiteUrl, SPPrefixType.ExplicitInclusion)
End If
End Using
Этот код завершается с ошибкой NullReferenceException для SPUtility.ValidateFormDigest (). Исследования показали, что это может быть связано с недостаточными привилегиями. Я попытался запустить код в блоке повышенных привилегий с помощью SPSecurity.RunWithElevatedPrivileges (AddressOf AddManagedPath), где AddManagedPath - это процедура Sub, содержащая приведенный выше пример кода.
После этого возникает ошибка InvalidOperationException: «Операция недопустима из-за текущего состояния объекта».
Куда я иду не так?
Один из обходных путей, который мне удалось сделать, - вызвать STSADM.EXE через Process.Start (), предоставив необходимые параметры, и это работает.
Обновление: при разработке веб-службы я запускаю ее с помощью встроенного веб-сервера Visual Studio 2005 - в каком контексте безопасности это будет выполняться? Могу ли я изменить контекст безопасности, поместив записи в web.config?
Обновление: Я думаю, что проблема определенно связана с неработающим веб-сервисом в правильном контексте безопасности SharePoint. Я решил воспользоваться предложенным обходным путем и выложить его в STSADM, хотя для этого необходимо, чтобы удостоверение пула приложений, под которым работает веб-служба, входило в состав администраторов SharePoint.