我是 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;