创建 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 上可以搜索音频。