Сбой wsDualHttpBinding с большими наборами данных
Я использую wsDualBinding в своем сервисе wcf для обработки двухсторонней связи в моем программном обеспечении. Кажется, все работает нормально, кроме случаев, когда я вызываю метод для получения списка клиентов. Если в сервисе я ограничу результаты запроса 2730 записями, я смогу получить результаты примерно через 1-2 секунды и отобразить их в таблице данных. Если я ограничу результаты до 2731 (еще один), я получаю следующую ошибку:
http://localhost:8731/Design_Time_Addresses/Dispatch_Studio_Server/DispatchService/ не получил ответ в течение настроенного времени ожидания (00:00:59.9990000). Время, выделенное для этой операции, могло быть частью более длительного времени ожидания. Это может быть связано с тем, что служба все еще обрабатывает операцию или службе не удалось отправить ответное сообщение. Пожалуйста, подумайте об увеличении времени ожидания операции (путем преобразования канала / прокси в IContextChannel и установки свойства OperationTimeout) и убедитесь, что служба может подключиться к клиенту.
В своем исследовании я прочитал, что потоковая передача лучше подходит для больших наборов данных, поэтому я также попытался настроить конечную точку basicHttpBinding, используя потоковую передачу вместо буферизации, и я получаю практически те же результаты. 2730 записей работает нормально, но 2731 записей дает мне следующую ошибку.
Произошла ошибка (невозможно прочитать данные из транспортного соединения: соединение было закрыто.) При передаче данных по каналу HTTP.
Я бы не назвал 2730 записей большим набором данных. Это заставляет меня верить, что есть что-то еще, что вызывает эту проблему.
Вот моя конфигурация клиента:
<system.serviceModel>
Вот моя конфигурация сервера:
<system.serviceModel>
Как видите, я пытался изменить maxMessageReceivedSize и другие параметры, чтобы решить эту проблему, но безрезультатно.
Спасибо за ваше время.
1 ответ
Помимо того факта, что вам никогда не следует отправлять такой большой объем данных клиенту (я сомневаюсь, что клиент выполнит задачу с полным набором данных), возможно, вы достигли предела MaxSerializedObjectsInGraph.
Попробуйте добавить поведение в ваших конфигурациях, содержащих:
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
Вы также можете рассмотреть возможность возврата меньшего набора результатов, используя нумерацию страниц или фильтрацию.