我有一种方法旨在将文件从HTTP URL下载到字节数组:
private static byte[] DownloadFileToByteArrayWorker(HttpWebRequest Request,int bufferLength)
{
byte[] responseByes = null;
//Round up to the nearest multiple of 1024
bufferLength = AdjustBufferLength(bufferLength);
Request.AutomaticDecompression = Decompressionmethods.GZip | Decompressionmethods.Deflate;
Request.servicepoint.Expect100Continue = false;
Request.Headers.Add(HttpRequestHeader.CacheControl,"no-cache");
using (var Response = (Httpwebresponse)Request.GetResponse())
{
using (Stream ResponseStream = Response.GetResponseStream())
{
using (MemoryStream ms = new MemoryStream())
{
int count = 0;
byte[] buf = new byte[bufferLength];
while ((count = ResponseStream.Read(buf,buf.Length)) > 0)
{
ms.Write(buf,count);
}
responseByes = ms.ToArray();
}
}
}
return responseByes;
}
Request.GetResponse()引发超时异常,无论我将HttpWebRequest的Timeout属性设置多长时间。我可以通过日志来验证程序是否在等待整个超时周期之后才出错,但是,将我的日志与Web服务器日志相关联可以表明Web服务器几乎立即发送回了响应。
一个有趣的注意事项是,当我通过负载平衡器而不是直接访问同一台Web服务器时,它几乎立即下载了文件。另外,如果我直接在Web浏览器中通过Web服务器访问URL(不需要代理,顺便说一句),我也可以立即从单个Web服务器下载文件。
一些其他详细信息:
- 我正在Windows 2012 R2上使用.NET Framework 4.7。
- 我要连接的Web服务器是RHEL7上的Apache。我不确定特定的Apache版本
- 我正在为HTTP流量保留的特定端口上连接到Web服务器(一个单独的网站托管在HTTPS的其他端口号上)
- 没有网络代理
有什么建议吗?