Загрузка потоковой передачи в 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. Можете ли вы опубликовать оба узла привязки для конечных точек?

Другие вопросы по тегам