我使用了一个宁静的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
我想停用
Transfer-Encoding:chunked
因为它写了一些我不需要的信息(身体中的6和0)
我该怎么做?
答案 0 :(得分:0)
创建WCF端点时,您需要指定正在使用的传输模式(TransferMode
)。
StreamedResponse
,Transfer-Encoding: chunked
将自动添加到回复标题中,Content-Length
将自动被忽略,即使您有任何关于此操作也无法做到的事情明确设置Content-Length
。它是内容长度或传输编码,它们根据传输模式互相替换,请阅读this (the first paragraph)。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, "");
。所以创建这样的端点:
Buffered
当我从WCF WebGet流式传输MP3音频时,我遇到了这个问题,我看不到内容长度。使用Content-Length
传输模式配置端点后,您将开始看到Accept-Ranges: bytes
。
对我而言,这只是战斗的一半。为了在Chrome上正常播放MP3,我还必须在响应标题中添加{{1}},以便可以在Chrome上搜索音频。