我使用一个休息的WCF,我调用了一个具有流返回类型的方法,这就是响应:
HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/octet-stream
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 08 Nov 2013 11:25:29 GMT
6
1;1;
0
我想禁用
传输编码:分块
因为它写了一些我不需要的加号信息(正文中的 6 和 0)
我该怎么做?
创建 WCF 终结点时,需要指定正在使用的传输模式 ( TransferMode
)。
- 如果设置为
StreamedResponse
,Transfer-Encoding: chunked
将自动添加到响应标头中,Content-Length
将自动省略,即使您显式设置了Content-Length
,您也无能为力。它是内容长度或传输编码,它们根据传输模式相互替换,请阅读此内容(第一段)。 - 如果将其设置为
Buffered
,则不会自动添加Transfer-Encoding: chunked
,这将允许包含Content-Length
(如果指定)。
因此,请像这样创建终结点:
WebHttpBinding wb = new WebHttpBinding(WebHttpSecurityMode.Transport);
wb.TransferMode = TransferMode.Buffered; // TransferMode.StreamedResponse;
ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(myService.IBlah), blah, "");
当我从WCF WebGet流式传输MP3音频时,我遇到了这个问题,但我看不到内容长度。将终结点配置为Buffered
传输模式后,您将开始看到Content-Length
。
对我来说,这只是成功的一半。为了在Chrome上正确播放MP3,我还必须在响应标头中添加Accept-Ranges: bytes
,以便在Chrome上可以搜索音频。