webHttpBinding支持流传输和缓存模式2种,如果要提供文件下载,肯定是要选择流传输模式的,不然文件要全部加载到内存后才会发送出去,不但占内存开销大,还影响了发送响应的速度。问题是流传输下面,自动使用了Transfer-Encoding:chunked的方式,这种方式将不告知客户端文件长度,即使我服务器设置消息头也没用,客户端就是得不到长度,导致了客户端以为我服务端不支持断点续传,甚至多线程下载都不能使用,除非自己开发一个下载软件,反正传统的下载软件都不支持,唯独NetTransport还能尝试在不知道是否能续传的情况下,发送续传指令,算是最人性化的软件了。
想来想去,只有一个方法可以考虑了,就是改造 webHttpBinding 的缓存模式,缓存模式是传统的http响应,各种http头都可以设置,自然断点续传,多线程传输都可以使用,所需解决的问题是消息的写入,不能写缓存,而是实时从流中获取(如果返回的是流对象)。
研究方向确定,接下来看能否成功自定义一个 webHttpBinding 类似的绑定类出来了。待续……