Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebRequest-.超时问题_C#_Http_Timeout_Webrequest - Fatal编程技术网

C# WebRequest-.超时问题

C# WebRequest-.超时问题,c#,http,timeout,webrequest,C#,Http,Timeout,Webrequest,有关更多背景信息,请参见: 我正在使用C#WebRequest方法将文件上载到S3。我已经有了一个预先签名的URL,S3正在给我上传。我最初遇到一个问题,如果我上传一个大文件,传输会在开始几分钟后停止。我在另一篇帖子上的评论说是.timeout造成的。果然是这样 我的问题是:我应该将.timeout设置为什么,或者如何根据要传输的文件的大小计算设置超时的内容当我只想向S3发送一个小文件时,我不想启动一个60分钟超时的WebRequest,但是我也可以将一个千兆字节的文件上传到S3,如果在文件完成

有关更多背景信息,请参见:

我正在使用C#WebRequest方法将文件上载到S3。我已经有了一个预先签名的URL,S3正在给我上传。我最初遇到一个问题,如果我上传一个大文件,传输会在开始几分钟后停止。我在另一篇帖子上的评论说是.timeout造成的。果然是这样

我的问题是:我应该将.timeout设置为什么,或者如何根据要传输的文件的大小计算设置超时的内容

当我只想向S3发送一个小文件时,我不想启动一个60分钟超时的WebRequest,但是我也可以将一个千兆字节的文件上传到S3,如果在文件完成之前超时,传输将被中断

另外,我如何捕获连接超时?也会使用.timeout吗?如果我只想尝试一个连接30秒,看看S3是否响应我的web PUT请求,如果没有,那么它就会超时

我的代码是:

WebRequest request = WebRequest.Create(PUT_URL_FINAL[0]);
//PUT_URL_FINAL IS THE PRE-SIGNED AMAZON S3 URL THAT I AM SENDING THE FILE TO

request.Timeout = 360000; //6 minutes -- If the transfer is over 6 minutes, it stops.

request.Method = "PUT";

//result3 is the filename that I am sending                                     
request.ContentType =
    MimeType(GlobalClass.AppDir + Path.DirectorySeparatorChar + "unzip" +
             Path.DirectorySeparatorChar +
             System.Web.HttpUtility.UrlEncode(result3));

byte[] byteArray =
    File.ReadAllBytes(
        GlobalClass.AppDir + Path.DirectorySeparatorChar + "unzip" +
        Path.DirectorySeparatorChar +
        System.Web.HttpUtility.UrlEncode(result3));

request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();

dataStream.Write(byteArray, 0, byteArray.Length); 

dataStream.Close();

//This will return "OK" if successful.
WebResponse response = request.GetResponse();
Console.WriteLine("++ HttpWebResponse: " +
                  ((HttpWebResponse)response).StatusDescription);

您可以尝试根据文件大小计算超时,但这样做意味着您必须知道或估计一些传输速度


另一种选择是,在通常情况下,选择“可接受”的超时,然后在以“标准超时”的两倍或十倍重试异常时……

您可以尝试根据文件大小计算超时,但这样做意味着您必须知道或估计一些传输速度


另一种选择是,在通常情况下,选择“可接受”的超时,然后在以“标准超时”的两倍或十倍重试异常时……

BTW,您的
WebResponse
对象需要位于
使用
blocks.BTW的范围内,您的
WebResponse
对象需要在
中使用
块。