WCF 禁用分块传输编码



我使用一个休息的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 )。

  • 如果设置为 StreamedResponseTransfer-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上可以搜索音频。

相关内容

  • 没有找到相关文章

最新更新