WCF エンドポイントを作成するときは、使用している転送モード ( ) を指定する必要がありますTransferMode
。
- に設定されている場合、は応答ヘッダーに自動的に追加され、
StreamedResponse
自動的に省略されます。明示的にを設定しても、それについては何もできません。それはContent-LengthまたはTransfer-Encodingのいずれかであり、転送モードに応じて互いに置き換えられます。これを読んでください(最初の段落)。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 オーディオをストリーミングしていたときにこの問題が発生し、Content-Length が表示されませんでした。エンドポイントがBuffered
転送モードで設定されると、 が表示されるようになりますContent-Length
。
私にとって、これは戦いの半分に過ぎませんでした。Chrome で MP3 を適切に再生するには、Chrome でAccept-Ranges: bytes
オーディオをシークできるように、応答ヘッダーにも追加する必要がありました。