WCF禁用分块传输编码(WCF disable chunked Transfer-Encoding)

2019-10-18 23:23发布

我用一个宁静的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),再加上一些什么信息我不需要

我该怎么做?

Answer 1:

当你创建一个WCF端点您需要指定什么传送模式( TransferMode您正在使用)。

  • 如果它被设置为StreamedResponseTransfer-Encoding: chunked将被自动添加到响应头, Content-Length将被自动忽略,并没有什么可以做的是,即使你设置Content-Length明确。 它要么是内容长度或传输编码,它们相互替换取决于传送模式,阅读这个(第一段) 。
  • 如果它被设置为BufferedTransfer-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

对我来说,这只是成功的一半。 为了正常播放MP3在Chrome,我只好也加入Accept-Ranges: bytes的响应头,使音频是在Chrome可查找。



文章来源: WCF disable chunked Transfer-Encoding