Во-первых, я хотел бы попросить теорию, потому что я не нашел никакой соответствующей документации: у нас есть клиент Silverlight и служба WCF. Связь между ними осуществляется через pollingDuplexHttpBinding.
Предположим, что сервер хочет отправить клиенту сообщение, размер которого больше, чем установлено MaxBufferSize и MaxReceivedMessageSize. Что происходит за кулисами в этом случае?
Теперь вот мой реальный опыт с этой проблемой:
Конфигурация привязки на стороне сервера:
<binding name="eventServiceBinding" sendTimeout="00:00:10" inactivityTimeout="24:00:00" receiveTimeout="24:00:00" serverPollTimeout = "00:01:00"/>
Отправляет большое (т.е. больше, чем значение, установленное в свойствах привязки клиента, как описано выше) сообщение с сервера клиенту. Затем отправьте второе (не большое) сообщение => Я получил время ожидания для второго сообщения (я не знаю, получал ли клиент первое сообщение).
Я попытался найти некоторые полезные записи, чтобы увидеть, что происходит с первым сообщением. Сделано это как на стороне сервера (путем активации регистратора WCF), так и на стороне клиента (с помощью Fidler). В журнале я не нашел ничего по-настоящему интересного (но, возможно, я не искал в нужных местах).
Более того - когда sendTimeout имеет большое значение (скажем, 10 минут), похоже, что все дополнительные сообщения, отправленные с сервера на клиент, «застряли» - никогда не принимаются клиентом, и никакие исключения не генерируются до истечения времени ожидания отправки , Кроме того, я испытываю странное явление, при котором не происходит никакой связи между любым клиентом и какой-либо службой, предоставляемой приложением IIS хостинга, - пока я не перезагружу IIS. Я не уверен на 100%, что это связано с предыдущей проблемой, описанной здесь.
Установка свойств MaxBufferSize и MaxReceivedMessageSize в привязке на стороне клиента, похоже, решает обе проблемы.
Пожалуйста, дайте мне знать, если у вас есть какой-либо опыт с такой проблемой и можете ли вы рассказать, что на самом деле происходит за кулисами в WCF здесь.