我的问题似乎与权限有关,但我不确定如何解决。
在我的一项功能的 FeatureActivated 事件中,我调用了我为使用 SPWebConfigModification 类管理 webconfig 条目而创建的类。该类读取我已添加到项目中映射的 Layouts 文件夹中的 xml 文件。
当我将 .wsp 部署到我的 Sharepoint 服务器时,一切都安装得很好,但是当 FeatureActivated 事件运行时,它会在尝试访问 xml 文件时引发 503 错误。我正在使用 powershell 脚本远程部署 .wsp,并且我有 powershell 、iisapp 池和 owstimer.exe 都使用相同的域管理用户。
我认为问题是 FeatureActivated 事件代码正在 OWSTIMER.exe 的范围内运行,因此将服务的登录更改为对服务器具有管理访问权限的域用户,以查看是否可以解决问题,但没有不管我得到什么503。
我已经找到了 xml 文件的 URL 并将其粘贴到 IE 中,一旦复制了它,我就可以从服务器上取回 xml 而没有问题。
谁能给我任何想法,以找出为什么 FeatureActivated 事件代码似乎无法访问服务器上的 XML 文件?
下面是从 FeatureActivated 事件调用以读取 xml 的类中的代码。
_contentservice = ContentService;
WriteTraceMessage("Getting SPFeatureProperties", TraceSeverity.Medium, 5);
_siteurl = properties.Definition.Properties["SiteUrl"].Value;
_foldername = properties.Definition.Properties["FolderName"].Value;
_filename = properties.Definition.Properties["FileName"].Value;
_sitepath = properties.Definition.Properties["SitePath"].Value;
WriteTraceMessage("Loading xml from layouts for configuration keys", TraceSeverity.Medium, 6);
xdoc = new XDocument();
XmlUrlResolver resolver = new XmlUrlResolver();
XmlReaderSettings settings = new XmlReaderSettings();
StringBuilder sb = new StringBuilder();
sb.Append(_siteurl).Append("_layouts").Append("/").Append(_foldername).Append("/").Append(_filename);
WriteTraceMessage("Path to XML: " + sb.ToString(), TraceSeverity.Medium, 7);
WriteTraceMessage("Credentials for xml reader: " + CredentialCache.DefaultCredentials.ToString(), TraceSeverity.Medium, 8);
resolver.Credentials = CredentialCache.DefaultCredentials; //this the issue might be here
settings.XmlResolver = resolver;
xdoc = XDocument.Load(XmlReader.Create(sb.ToString(), settings));