如何在 XDocument.Load(string uri) 上设置超时?
有没有办法在 System.Linq.Xml.XDocument.Load(string uri) 上设置超时?或者我应该使用实现 C# 通用超时中描述的技术?
Is there a way to set a timeout on System.Linq.Xml.XDocument.Load(string uri)? Or should I use the technique described in Implement C# Generic Timeout?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我所知,没有任何内置的东西。您可以使用 WebRequest (您可以设置超时),然后将 XML 数据直接传递到
XDocument.Load
方法。从技术上讲,最“强大”的解决方案是实现 XmlResolver 自己在 GetEntity() 实现来执行超时。然后根据您的
XmlResolver
创建一个XmlReader
并将XmlReader
传递给XDocument.Open
。我说这会更“健壮”的原因是,如果 XML 文件引用 Web 服务器上的其他实体(例如 DTD),那么您可能也希望应用超时,并且不仅仅是最初的要求。
There is nothing built-in as far as I'm aware. You can fetch the XML content yourself with an instance of WebRequest (which you can set a timeout on) and then pass the XML data directly to the
XDocument.Load
method.Technically, the most "robust" solution would be to implement XmlResolver yourself which uses a
WebRequest
in the GetEntity() implementation to do a timeout. Then create anXmlReader
based on yourXmlResolver
and pass theXmlReader
toXDocument.Open
.The reason I say that would be more "robust" is that if the XML file references other entities on the web server (e.g. a DTD) then you would probably want the timeout to apply for that as well and not just the initial request.