在访问SharePoint 2013/Office 365列表时出现“禁止使用DTD”错误(但不明确地使用XML)。

4
我一直在使用以下代码从Office 365的Sharepoint获取文件夹和文件列表...
...
   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
3个回答

1
我曾使用第二个路由器作为WiFi扩展器,但连接Sharepoint时似乎产生了奇怪但可重现的影响。我停止使用它,改用我的主路由器/ WiFi盒子,问题消失了。

这与 DNS 服务器有关,而不是直接与路由器有关。如果 DNS 服务器无法解析域并返回状态 200 和错误页面,则会发生此错误。在我的情况下,无法解析 http://msoid.<mycompany>.emea.microsoftonline.com/ 域。 - Juergen Gutsch

1
我在英国Virgin Media(一家基于ISP的公司)的互联网连接中遇到了同样的问题。原来Virgin Media拦截网络调用是为了进行“高级网络错误搜索”。幸运的是,你可以选择退出。只要我这么做了,它就正常工作了。
有关原因及如何选择退出Virgin Media的高级搜索的更多详细信息,请参见http://pryankrohilla.blogspot.co.uk/2014/05/error-resolved-connect-sposervice-for.html

0

我对此感到不满意,本来今天早上打算继续调试程序并进行更多的诊断,但现在问题似乎神奇地停止了发生,无论这是否是微软端进行了调整,或者可能是SharePoint中的故障,我不知道,因为我的笔记本电脑自出现问题以来一直开着。


你有没有接近问题的根本原因?我刚刚把我的笔记本电脑休眠了一下,稍后重新启动后,我遇到了同样的问题。不过我看不到我安装了特定的补丁http://support.microsoft.com/kb/2964358.. - gumaflux
我最终找到了问题的根源...出乎意料的是,我的WiFi信号扩展器有问题,停止使用后就没有连接问题了。然后我又开始使用WiFi信号扩展器,问题又出现了。 - FridgeMagnet
Hilarious 发现了同样的事情,不过还是谢谢你回复。 - gumaflux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接