首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Internet没有正确地从WCF下载图像

Internet没有正确地从WCF下载图像
EN

Stack Overflow用户
提问于 2015-10-02 21:48:32
回答 2查看 345关注 0票数 1

我有一个WCF服务,它提供一个端点来动态生成QR映像.该图像首先写入内存流tempStream。然后,在端点中有以下代码:

代码语言:javascript
运行
复制
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ClearContent();
response.ClearHeaders();

response.Buffer = false;
response.ContentType = "image/png";
response.CacheControl = "No-Cache";

response.AddHeader("Content-Length", tempStream.Length.ToString())
response.AddHeader("Accept-Ranges", "bytes");

tempStream.WriteTo(response.OutputStream);

response.Flush();
response.End();

它在Firefox中运行得很好。如果手动命中端点,则会下载图像,如果我将端点引用为src标记中的img属性,则图像将内联加载。但是,在IE中,图像不会在img标记中加载内联,如果我尝试手动命中端点,它将在第一次加载完整的映像,但随后的刷新(似乎在浏览器重新启动之前),它只加载图像的一部分。

在检查F12窗口中的网络选项卡时,它似乎正在从服务器下载确切的1.00KB数据(包括标头),这意味着它获得了大约750 KB的图像数据。然后,它向服务器发出另一个相同的请求,并且只获取没有图像数据的头。Content-Length头被正确地设置为图像的大小;IE只是没有下载那么多。再说一遍,Firefox很好。

我的同事建议我将transferMode设置为Streamed in Web.config,但这也不起作用。如何让IE一次下载整个图像?

编辑:

我应该注意,在Visual的IIS Express服务器中运行WCF服务时,工作正常。只有当应用程序部署到IIS 7.5时,才会出现问题。Firefox在这两种环境中都运行良好。

编辑2:

我刚刚在响应中添加了Thread.Sleep(1000),就在response.End()之前,它解决了这个问题。IE现在下载整个响应,不尝试发出第二个请求。为什么?!response.Flush();应该阻止请求并在调用response.End()之前将所有的数据发送给客户机,据我所知,response.End()也会刷新流,因此手动调用Flush()是多余的。为什么显式地阻塞线程一秒钟使其工作?我还应该注意,如果不放入Thread.Sleep(1000),它仍然适用于first request,因为.NET必须在AppPool每次重新启动时编译后端,这会像Thread.Sleep(1000)一样阻塞请求一定的时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 16:36:49

好吧,我现在解决了。现在我不再使用HttpContext.Current.Response,而是使用WebOperationContext.Current.OutgoingResponse。另外,我不是写入响应的输出流,而是从端点返回stream对象,特别是将图像保存到的MemoryStream (在图像被回溯到0之后)。在传输完成之前,似乎没有一致的方式将操作写到HttpResponse块,因此请求总是结束得太快。甚至火狐在大图片上也有问题。从端点函数返回Stream对象显然会使WCF等待,直到所有数据在结束请求之前被发送。

票数 0
EN

Stack Overflow用户

发布于 2015-10-04 02:42:47

试试这个:

代码语言:javascript
运行
复制
response.AddHeader("Content-Disposition", "filename=" + fileName);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32916353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档