503(服务器不可用)加载本地 XHTML 文件时出现 WebException

Posted

技术标签:

【中文标题】503(服务器不可用)加载本地 XHTML 文件时出现 WebException【英文标题】:503 (Server Unavailable) WebException when loading local XHTML file 【发布时间】:2010-05-22 01:09:47 【问题描述】:

所以我目前正在开发一个 ePub 阅读器应用程序,并且我一直在阅读一堆常规 XML 文件,使用 System.Xml 和 XmlDocument 就可以了:

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "META-INF/container.xml"));
XmlNodeList xnl = xmldoc.GetElementsByTagName("rootfile");

但是,现在我正在尝试打开包含实际书籍文本的 Xhtml 文件,它们是 XHTML 文件。现在我真的不知道这两者之间的区别,但我收到以下代码错误(在同一个文档中,使用相同的 XmlDocument 和 XmlNodeList 变量)

xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "OEBPS/part1.xhtml"));

“WebException 未处理:远程服务器返回错误:(503) Server Unavailable”

这是一个本地文档,所以我不明白为什么会出现此错误?任何帮助将不胜感激。 :)

如果有帮助,我会在此处获得完整的源代码: http://drop.io/epubtest

(我知道ePubConstructor.ParseDocument() 方法非常混乱,我只是想在我把它分成类之前让它工作)

【问题讨论】:

【参考方案1】:

尝试从 XHTML 文件中删除 DOCTYPE,可能您有指向外部 DTD 的链接。

【讨论】:

感谢您的回复!这确实有效,但是该程序的目的是获取这些现有文件并将其读入,因此我将无法从每个文件中手动删除 DOCTYPE 行。有没有办法可以把它拉进去,忽略那个标签?【参考方案2】:

尝试以下未经测试的代码:

XmlDocument xmldoc = new XmlDocument(); 
XmlReaderSettings settings = new XmlReaderSettings

    XmlResolver = new XmlUrlResolver()
;
using (var reader = XmlReader.Create(
    Path.Combine(Directory.GetCurrentDirectory(), 
                 "OEBPS/part1.xhtml"), settings))

    xmlDoc.Load(reader);

【讨论】:

谢谢!我还从您的代码中找到了另一个建议,我可以只做xmldoc.XmlResolver = null;,这也可以。我不确定一个是否比另一个更可取,但您的代码非常有帮助! (另外你给了我使用 (var...) 的提示,这将帮助我清理我的代码)【参考方案3】:

试试下面的代码:

XmlDocument xmldoc = new XmlDocument();

doc.XmlResolver = null; // 这会忽略 DTD

xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "META-INF/container.xml"));

XmlNodeList xnl = xmldoc.GetElementsByTagName("rootfile");

【讨论】:

以上是关于503(服务器不可用)加载本地 XHTML 文件时出现 WebException的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 错误 503。尝试运行本地主机时服务不可用

IIS 服务器上的 Web API 内的 Httpclient GetAsync 失败(503 服务不可用)

HTTP 错误 503。该服务在简单的 ASP.NET 4.0 网站下不可用

HTTP 错误 503 Windows 10 秋季更新后服务在 IIS 上不可用

Heroku 503 服务不可用

IIS HTTP 错误 503。服务不可用