Сбой 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" />

Вы также можете рассмотреть возможность возврата меньшего набора результатов, используя нумерацию страниц или фильтрацию.

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