从URL加载Xml时出现超时错误

che*_*539 6 c# xml asp.net

我正在执行将live xml文件(从live url)加载到XmlDataDocument的任务,但每次我收到错误时:

操作已超时

代码如下,包含xml提要的url,我想将其加载到xmlDoc中.

XmlDataDocument xmlDoc = new XmlDataDocument();
xmlDoc.Load("http://www.globalgear.com.au/productfeed.xml");
Run Code Online (Sandbox Code Playgroud)

请建议任何解决方案.

das*_*ash 20

不要直接使用XmlDataDocument类的Load方法; 在长时间运行的HTTP请求时,你几乎没有办法影响行为.

相反,使用HttpWebRequest和HttpWebResponse类为您完成工作,然后将后续响应加载到您的文档中.

例如:

    HttpWebRequest rq = WebRequest.Create("http://www.globalgear.com.au/productfeed.xml") as HttpWebRequest;
    //60 Second Timeout
    rq.Timeout = 60000;
    //Also note you can set the Proxy property here if required; sometimes it is, especially if you are behind a firewall - rq.Proxy = new WebProxy("proxy_address");
    HttpWebResponse response = rq.GetResponse() as HttpWebResponse;


    XmlTextReader reader = new XmlTextReader(response.GetResponseStream());

    XmlDocument doc = new XmlDocument();
    doc.Load(reader);
Run Code Online (Sandbox Code Playgroud)

我在本地应用程序实例中测试了此代码,并使用URL中的数据填充XmlDocument.

你也可以在上面的例子中用XmlDataDocument代替XmlDocument - 我更喜欢使用XmlDocument,因为它还没有被标记为过时.

我把它包装在一个函数中:

public XmlDocument GetDataFromUrl(string url)
{
    XmlDocument urlData = new XmlDocument();
    HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(url);

    rq.Timeout = 60000;

    HttpWebResponse response = rq.GetResponse() as HttpWebResponse;

    using (Stream responseStream = response.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(responseStream);
        urlData.Load(reader);
    }

    return urlData;

}
Run Code Online (Sandbox Code Playgroud)

只需拨打电话:

XmlDocument document = GetDataFromUrl("http://www.globalgear.com.au/productfeed.xml");
Run Code Online (Sandbox Code Playgroud)