此异常可能取决于HTTP请求超时吗?

时间:2014-03-06 17:55:11

标签: c# httprequest

我是 C#(我来自Java)的新手,我遇到了以下问题。

我有一个应用程序必须下载此XML文件,然后解析它:http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml

问题是下载过程中 SOMOTIMES 会引发以下激励(有时候,有时候它可以正常工作,在其他情况下抛出异常)

  

{“无法从传输连接中读取数据:现有的   连接被远程主机强行关闭。“}

正如你在这里看到的那样,这个文件非常大,实际上它的重量是 19.46MB http://nvd.nist.gov/cpe.cfm

要将此文件下载到我的代码中,我有类似的内容:

包含 main()方法的程序类:

namespace ImportCPE
{
    class Program
    {
        static void Main(string[] args)
        {
            ImportCPE task = new ImportCPE("DefaultConnection");
            task.start(new Uri("http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml"));
        }
    }
}

ImportCPE 类扩展了此类 ImportBase.ImportBase ,其中包含所有基本导入功能,包括从表示为URL的源XML数据下载文件。

因此,在我的 ImportBase 类中,我有以下代码将XML文件下载到字符串对象中:

string esito;
esito = downloadXML(sourceFile, new System.IO.FileInfo(".\\temp.xml"));

这是 downloadXML()方法的代码(总是在同一个 ImportBase 类中定义):

    private string downloadXML(Uri sourceFile, System.IO.FileInfo destinationFile)
    {

        //  sourceXML = destinationFile;
        //return true;


        System.Net.WebRequest myRequest;
        myRequest = System.Net.WebRequest.Create(sourceFile);
        //if (bProxy)
        //{
        //    myRequest.Proxy = wp;
        //}
        myRequest.Timeout = 15000;

        System.Net.WebResponse myResponse = null;
        System.IO.StreamReader reader = null;
        System.IO.FileStream destStream = null;
        try
        {
            myResponse = myRequest.GetResponse();


            if (destinationFile.Exists)
            {
                destinationFile.Delete();
            }

            destStream = destinationFile.Create();


            reader = new System.IO.StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
            reader.BaseStream.CopyTo(destStream);

            //html = reader.ReadToEnd();

            sourceXML = destinationFile;

        }
        catch (System.Net.WebException ex)
        {
            return ex.Message;
        }
        finally
        {
            if (myResponse != null)
            {
                myResponse.Close();
            }
            if (reader != null)
            {
                reader.Close();
            }

            if (destStream != null)
            {
                destStream.Close();
            }


        }
        return "";
    }

使用Visual Sturio 调试器在我看来,当它尝试在 downloadXML()方法中执行以下行时会出现问题:

 myResponse = myRequest.GetResponse();

发现以下异常: {“操作已超时”}

那么问题是什么?可能因为文件太大而导致设置的超时时间缩短?所以有时可以下载它,在其他情况下可以不下载吗?

增加请求超时可能我可以解决这个问题吗?

设定者:

myRequest.Timeout = 15000;

0 个答案:

没有答案