模拟远距离下载文件

时间:2013-11-12 19:17:38

标签: c# asp.net file-transfer windows-server-2012

我有以下功能块,当客户端在美国境内的某个地方访问服务器时,该功能块完成正常。但是,当客户端离东欧更远时,大文件的下载失败。关于如何模拟来自远程IP地址的流量的任何想法?或任何其他想法使这个下载更快。

这些文件很大,即100 MB。它们与提供网站的服务器位于同一服务器上。我正在使用C#.NET Framework 4.5 IIS 8

System.IO.Stream stream = null;
int bytesToRead = 262144;
byte[] buffer = new Byte[bytesToRead];

try
{
    var response = HttpContext.Current.Response;
    response.ClearContent();
    response.Clear();

    //get file from file system
    string path = Properties.Settings.Default.DownloadDirectory + fileId;
    var fileInfo = new FileInfo(path);
    if (fileInfo.Exists)
    {
        using (stream = new FileStream(path, FileMode.Open))
        {
            response.ContentType = mimeType;

            response.AddHeader("Content-Disposition", "attachment; filename=\"" + name + "\"");
            response.AddHeader("Content-Length", fileInfo.Length.ToString());

            int length;
            do
            {
                if (response.IsClientConnected)
                {
                    length = stream.Read(buffer, 0, bytesToRead);
                    response.OutputStream.Write(buffer, 0, length);
                    response.Flush();
                    buffer = new Byte[bytesToRead];
                }
                else
                {
                    length = -1;
                }
            } while (length > 0);

            stream.Close();
            response.End();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我们最终使用了HttpResponse.TransmitFile。它直接写入响应输出流,而不会缓冲到内存中。然后我们使用世界各地的代理商对其进行了测试。

答案 1 :(得分:-1)

为了设置测试环境,有一些模拟WAN连接的工具。

How do I simulate a low bandwidth, high latency environment?