1

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

我该怎么做?

4

1 回答 1

0

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

  • 如果设置为StreamedResponse,Transfer-Encoding: chunked将自动添加到响应标头中,Content-Length将自动省略并且您无能为力,即使您Content-Length明确设置。它是 Content-Length 或 Transfer-Encoding,它们根据传输模式相互替换,请阅读此(第一段)
  • 如果设置为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 音频时遇到了这个问题,我看不到 Content-Length。一旦您的端点配置了Buffered传输模式,您将开始看到Content-Length.

对我来说,这只是成功的一半。为了在 Chrome 上正确播放 MP3,我还必须添加Accept-Ranges: bytes响应标头,以便在 Chrome 上可以搜索音频。

于 2014-07-17T19:45:36.920 回答