我用一个宁静的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
您正在使用)。
- 如果它被设置为
StreamedResponse
, Transfer-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
。
对我来说,这只是成功的一半。 为了正常播放MP3在Chrome,我只好也加入Accept-Ranges: bytes
的响应头,使音频是在Chrome可查找。