2010-04-08 4 views
4

У меня есть служба wcf, которую я настраиваю для работы под IIS 7. У меня есть набор сервисов для потоковой передачи для передачи. Когда я сам размещаю службу в консольном приложении, каждая вещь работает нормально. Но когда клиент подключается к iIS-хостингу, он, похоже, буферизуется, и клиент в конечном итоге отключается. Я использовал скрипача, чтобы определить, что это время ожидания клиента происходит до того, как будет выполнен запрос http.загрузка потоковой передачи в службу WCF IIS 7 не работает

Вот привязки серверов.

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

Там, кажется, нет никакого решения этой проблемы. Смотрите эту тему на форумах MSDN, где кто-то пытается сделать то же самое. http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/cfe625b2-1890-471b-a4bd-94373daedd39 –

+0

@MikeSchenk вы должны поменять свой комментарий на ответ. Этот поток говорит, что это проблема, которая может быть исправлена ​​в .Net 4.5 –

ответ

0

Вы закрываете поток в клиенте? Если значение true, попробуйте закрыть только на стороне обслуживания. Также проверьте, работает ли его операция OneWay. Можете ли вы разместить оба узла привязки для конечных точек?

+1

Поток закрыт на сервере. Но запрос никогда не делает это так далеко. –

2

В последнее время у нас была та же проблема. Когда вы размещаете свою службу в IIS, независимо от того, включена ли вы потоковая передача или нет, ваша служба будет буферизовать все сообщение до его отправки. Причина этого заключается в том, что похоже, что WCF не устанавливает Response.BufferOutput в значение «false» (по умолчанию это правда), когда потоковая передача включена в службе. Обойти можно найти здесь:

http://weblogs.asp.net/jclarknet/archive/2008/02/14/wcf-streaming-issue-under-iis.aspx

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