HTTP 客户端通过正确的代理下载 XML。下一行却从原始 URL 创建 XML 读取器,这一行会重新发起一次抓取,而不是解析已下载的数据。

对于已经配置好目标路由的客户端,把它的响应流交给解析器:

using var response = await client.GetAsync(documentUri);
response.EnsureSuccessStatusCode();
using var stream = await response.Content.ReadAsStreamAsync();

var settings = new XmlReaderSettings
{
    DtdProcessing = DtdProcessing.Prohibit,
    XmlResolver = null
};
using var reader = XmlReader.Create(stream, settings, documentUri.AbsoluteUri);
var document = XDocument.Load(reader);

相关的命名空间是 System.Xml 和 System.Xml.Linq。示例特意禁用了 DTD 处理和外部解析;这并不是借同一个客户端获取任意外部实体的做法。

基 URI 保留了文档的位置元数据。如果经过批准的解析或校验流程确实要获取外部架构或其他依赖,这些获取行为需要各自明确的解析器和路由设计。

不要通过更改第一个、成功客户端的密码来诊断第二次网络故障。先确定解析器收到的是流还是 URL,然后单独跟进任何附加资源。

相关文章