调用SPFarm.Update更新Farm的属性包时,出现Access denied

最近在写一个SharePoint 2010 的Application page时,想把一些数据存在放到SPFarm.Properties[“key”],但是再调用SPFarm.Update时,总是出现Access denied的错误:

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)

即使提升的杼也一样。

经过调查发现,如果这个页面通过管理中心的URL来访问时,一切正常。但如果是通过其它的web app的URL来访问,就会出现这个问题。初步判断SPFarm.Update仅仅能在CA上运行。google后发现这篇文章:http://stackoverflow.com/questions/3958548/securityexception-when-accessing-spfarm-propertybag-from-wcf-service-hosted-in-sh,印证了我的判断。

我个人最后的解决方案:开发了一个自定义的web service部署到CA,然后通过调用http://CA site URL:port/_vti_bin/updateFarm.asmx来解决这个问题。获取CA 的URL可以使用如下代码:

         /// <summary>
        /// get CA site url
        /// </summary>
        /// <returns></returns>
        public static string GetCASiteURL()
        {

            var caapp = SPAdministrationWebApplication.Local;

            return  caapp.Sites[0].Url;
        }

原文地址:https://www.cnblogs.com/ITHelper/p/2075926.html