我一直在使用以下代码从Office 365的Sharepoint获取文件夹和文件列表...
这在未安装上述KB的计算机上可以正常运行,但在我的电脑上无法运行(我得到了与我的其他代码相同的异常)。显然,在短期内卸载KB可以使事情正常工作,但在较长时间内这并不好。非常感谢您提供有关如何避免此错误的任何建议。我只能假设Microsoft现在已经实施了访问列表的“首选”方式,但我对此一无所知。 谢谢 Dougie
...
var folders = ListFolders(libraryName, clientContext, web);
...
public List<Folder> ListFolders(string libraryName, ClientContext clientContext, Web web)
{
var list = GetDocumentLibrary(libraryName, clientContext, web);
var folders = list.RootFolder.Folders;
clientContext.Load(folders);
clientContext.ExecuteQuery();
return folders.ToList();
}
public List GetDocumentLibrary(string libraryName, ClientContext clientContext, Web web)
{
var query = clientContext.LoadQuery(web.Lists.Where(p => p.Title == libraryName));
clientContext.ExecuteQuery();
return query.FirstOrDefault();
}
我的电脑重启后(因为安装了Windows更新),它就无法正常工作了。根据我所做的一些测试,我强烈怀疑是由于http://support.microsoft.com/kb/2964358引起的。
在GetDocumentLibrary()中达到clientContext.ExecuteQuery()语句时,会抛出以下异常:
“System.Xml.XmlException”的未处理异常发生在 System.Xml.dll 中,附加信息: 由于安全原因,在此 XML 文档中禁止 DTD。若要启用 DTD 处理,请将 DtdProcessing 属性设置为 Parse,并将这些设置传递到 XmlReader.Create 方法中。”
我想知道如何解决这个问题,因为我没有有意使用System.XML,ExecuteQuery运行时它是一个后台函数或进程。
我能否向此处或clientContext传递一些附加的XMLReader信息(我认为不行),因此我不确定如何执行此查询以防止DTD错误。我还尝试了使用以下代码以不同的方式访问列表...(来源于微软的MSDN页面)
List list = clientContext.Web.Lists.GetByTitle(libraryName);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View/>";
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(list); clientContext.Load(listItems);
clientContext.ExecuteQuery();
这在未安装上述KB的计算机上可以正常运行,但在我的电脑上无法运行(我得到了与我的其他代码相同的异常)。显然,在短期内卸载KB可以使事情正常工作,但在较长时间内这并不好。非常感谢您提供有关如何避免此错误的任何建议。我只能假设Microsoft现在已经实施了访问列表的“首选”方式,但我对此一无所知。 谢谢 Dougie