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

を無効にしたい

Transfer-Encoding: チャンク

必要のないプラスの情報を書いているので(本文に6と0)

どうすればできますか?

4

1 に答える 1

0

WCF エンドポイントを作成するときは、使用している転送モード ( ) を指定する必要がありますTransferMode

  • に設定されている場合、は応答ヘッダーに自動的に追加され、StreamedResponse自動的に省略されます。明示的にを設定しても、それについては何もできません。それはContent-LengthまたはTransfer-Encodingのいずれかであり、転送モードに応じて互いに置き換えられます。これを読んでください(最初の段落)Transfer-Encoding: chunkedContent-LengthContent-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 オーディオをストリーミングしていたときにこの問題が発生し、Content-Length が表示されませんでした。エンドポイントがBuffered転送モードで設定されると、 が表示されるようになりますContent-Length

私にとって、これは戦いの半分に過ぎませんでした。Chrome で MP3 を適切に再生するには、Chrome でAccept-Ranges: bytesオーディオをシークできるように、応答ヘッダーにも追加する必要がありました。

于 2014-07-17T19:45:36.920 に答える