2013-11-08 5 views
1

Я использую успокоительной WCF, и я называю метод, который получил тип возвращаемого потока, и это ответ:WCF отключить фрагментированное Transfer-Encoding

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 в организме)

Как я могу это сделать?

+1

Я бы рекомендовал просто написать клиенту, чтобы он правильно обрабатывал T-E: chunked. –

+0

Согласовано. Per [RFC 7230] (http://tools.ietf.org/html/rfc7230#section-4.1): «Получатель ДОЛЖЕН иметь возможность анализировать и декодировать кодированное кодирование передачи». Лучше исправить клиента, чем заставить сервис обслуживать неисправные реализации, IMO. – cHao

ответ

0

Когда вы создаете конечную точку WCF, вам нужно указать, какой режим передачи() вы используете.

  • Если он установлен в 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, ""); 

У меня была эта проблема, когда я был потокового MP3-аудио с WCF WebGet, и я не мог видеть, Content-Length. Как только ваша конечная точка настроена с режимом передачи Buffered, вы начнете видеть Content-Length.

Для меня это была только половина битвы. Чтобы правильно воспроизводить MP3 в Chrome, мне пришлось добавить Accept-Ranges: bytes в заголовки ответов, чтобы аудио можно было искать в Chrome.

Смежные вопросы