2011-01-27 21 views
1

我正在构建一个自定义XML文档。在XmlDocument.CreateDocumentType方法中超时

以下代码需要30秒才能执行(请参阅注释)为什么?

var doc = new XmlDocument(); 
doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null)); 

// hangs on next line - doc.CreateDocumentType() 
var xmlDocType = doc.CreateDocumentType(
      "svg" 
      , "-//W3C//DTD SVG 20001102//EN" 
      , "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd" 
      , null); 

doc.AppendChild(xmlDocType); 

当这发生在30秒内,我得到以下异常:

System.Net.WebException:

"The underlying connection was closed: The connection was closed unexpectedly." 

Exception Stack Trace:

at System.Net.HttpWebRequest.GetResponse() 
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) 
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) 
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) 
at System.Xml.XmlTextReaderImpl.OpenAndPush(Uri uri) 
at System.Xml.XmlTextReaderImpl.PushExternalEntityOrSubset(String publicId, String systemId, String 

回答

5

可能是因为您的解析器正试图从www.w3.org获取指定的DTD。

由于交通繁忙,他们不再直接投放DTD(详情请参阅this link)。

您需要从他们的W3C网站下载DTD,将它们缓存在本地,并让您的解析器将指定的URL映射到本地缓存副本。