Я размещал службу WCF в SharePoint 2010 (basicHttpBinding), используя это руководство . Сборка развернута в GAC и содержит службу WCF и задание таймера. Оба вызывают один и тот же метод. Timejob работает успешно.
Но когда я вызываю метод службы WCF, я получаю исключение, что он не может записать свойство в SPFarm PropertyBag.
System.Security.SecurityException: Access denied.
at Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate()
at Microsoft.SharePoint.Administration.SPFarm.Update()
at MyCompany.MyProduct.Business.Config.SetPropertyValue(IPropertyBag propertyBag, String propertyName, String value)
The Zone of the assembly that failed was:
MyComputer
Я пытался вызвать метод с использованием учетной записи администратора фермы и пытался использовать SPSecurity.RunWithElevatedPrivileges, но безуспешно.
Я проверил WindowsIdentity.GetCurrent () внутри и снаружи блока повышенных привилегий, вне его - это пользователь вызывающего абонента, а внутри - пользователь WebApplications AppPool .
Таким образом, пользователь AppPool правильно олицетворяет себя, но SharePoint 2010 " запрещает изменение ... всех объектов, унаследованных от SPPersistedObject в пространстве имен Microsoft.SharePoint.Administration ... из веб-приложений содержимого "
В статье говорится, что для избавления от этого поведения есть переключатель SPWebService.ContentService.RemoteAdministratorAccessDenied (пространство имен Microsoft.SharePoint.Administration), но я не могу полагаться на администраторов, чтобы использовать это для запуска моего решения .
Так что я до сих пор без решения