Это вопрос для гуру 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.