WCF禁用分块传输编码

时间:2013-11-08 11:34:41

标签: c# wcf http stream web-config

我使用了一个宁静的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

我想停用

  

Transfer-Encoding:chunked

因为它写了一些我不需要的信息(身体中的6和0)

我该怎么做?

1 个答案:

答案 0 :(得分:0)

创建WCF端点时,您需要指定正在使用的传输模式(TransferMode)。

  • 如果设置为StreamedResponseTransfer-Encoding: chunked将自动添加到回复标题中,Content-Length将自动被忽略,即使您有任何关于此操作也无法做到的事情明确设置Content-Length。它是内容长度或传输编码,它们根据传输模式互相替换,请阅读this (the first paragraph)
  • 如果设置为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, "");

所以创建这样的端点:

Buffered

当我从WCF WebGet流式传输MP3音频时,我遇到了这个问题,我看不到内容长度。使用Content-Length传输模式配置端点后,您将开始看到Accept-Ranges: bytes

对我而言,这只是战斗的一半。为了在Chrome上正常播放MP3,我还必须在响应标题中添加{{1}},以便可以在Chrome上搜索音频。