Загрузка потоковой передачи в WCF IIS 7 размещенный сервис не работает
У меня есть служба wcf, которую я настраиваю для работы под IIS 7. У меня установлена служба потоковой передачи для режима передачи. Когда я сам размещаю сервис в консольном приложении, кажется, что все работает нормально. Но когда клиент подключается к службе, размещенной на iis, он, похоже, буферизуется, и время ожидания клиента истекает. Я использовал fiddler, чтобы определить, что тайм-аут этого клиента наступает еще до того, как будет сделан http-запрос.
Вот привязка серверов.
var binding = new CustomBinding();
binding.Elements.Add( new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.Soap12WSAddressing10
} );
var secBinding = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
secBinding.AllowInsecureTransport = true;
binding.Elements.Add( secBinding );
binding.Elements.Add( new HttpTransportBindingElement()
{
TransferMode = TransferMode.Streamed,
MaxReceivedMessageSize = Int32.MaxValue,
} );
И клиент связывает:
var binding = new CustomBinding();
binding.Elements.Add( new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.Soap12WSAddressing10
} );
var secBinding = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
secBinding.AllowInsecureTransport = true;
binding.Elements.Add( secBinding );
binding.Elements.Add( new HttpTransportBindingElement()
{
TransferMode = TransferMode.Streamed,
MaxReceivedMessageSize = Int32.MaxValue,
MaxBufferSize = 400
} );
Кроме того, время соединения истекает, потому что поток бесконечен, и сервер должен прочитать первые несколько байтов, а затем закрыть поток.
2 ответа
Недавно у нас была такая же проблема. Когда вы размещаете свою службу в IIS, независимо от того, включена ли потоковая передача или нет, ваша служба буферизует все сообщение до его отправки. Причиной этого является то, что WCF не устанавливает "Response.BufferOutput" в "false" (по умолчанию true), когда потоковая передача включена в службе. Обходной путь можно найти здесь:
http://weblogs.asp.net/jclarknet/archive/2008/02/14/wcf-streaming-issue-under-iis.aspx
Вы закрываете поток в клиенте? Если это правда, попробуйте закрыть только на стороне обслуживания. Кроме того, проверьте, является ли это операцией OneWay. Можете ли вы опубликовать оба узла привязки для конечных точек?