byte[] downbuffer = fsc.DownloadFile(wj.fileid, null);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Buffer = false;
            Response.AddHeader("Content-Length", downbuffer.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(wj.zbwjName, System.Text.Encoding.UTF8));
            try
            {
                try
                {
                    using (MemoryStream mms = new MemoryStream(downbuffer))
                    {
                        long dataToRead = mms.Length;
                        int length = 0;
                        // 缓冲区为10k
                        byte[] buffer = new Byte[10000];
                        while (dataToRead > 0)
                        {
                            // 检查客户端是否还处于连接状态
                            if (Response.IsClientConnected)
                            {
                                length = mms.Read(buffer, 0, 10000);
                                Response.OutputStream.Write(buffer, 0, length);
                                Response.Flush();
                                buffer = new Byte[10000];
                                dataToRead = dataToRead - length;
                            }
                            else
                            {
                                // 如果不再连接则跳出死循环
                                dataToRead = -1;
                            }
                        }
                    }                }
                catch (Exception e)
                {
                    AlertErrMsg = e.Message;
                }
            }
            finally
            {
                Response.End();
            }这段代码为下载代码,但是遇到了很奇怪的问题,就是下载工具下载时会出现假死的现象,跟踪后语句是在Response.OutputStream.Write(buffer, 0, length);这句后会卡死,原因是执行了这句语句后下载工具会截获到响应,但是不知道为什么像世界之窗、搜狗、360等浏览器自带的下载工具点击确定和取消,都不会提交回来。所以线程一直在等待,导致假死。但如果使用IE自带的下载方式下载,则完全正常,无论是保存、取消还是直接打开都没有问题。
不知道是什么原因!

解决方案 »

  1.   

    也不行。下载是在一个button的onclick事件中触发的,而不是弹出新页面下载,会不会是这种问题造成的?我测试过了,把同样的代码放到一个单独的网页执行则不会有问题
      

  2.   

    测试发现是由于调用wcf造成:
     byte[] downbuffer = fsc.DownloadFile(wj.fileid, null);
    这是从wcf中获取文件流,获取成功。但是从wcf获取的文件流,如果IE内核的浏览器自带的下载工具下载则会失败。
      

  3.   

    Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode("", System.Text.Encoding.UTF8));
    改成这样看看