Потоковая передача неопределенного количества объектов через WCF - PullRequest
8 голосов
/ 29 августа 2010

У меня есть служба WCF, которая должна считывать большое (от 10 до 20 миллионов) количество объектов из базы данных.

Я хотел бы, чтобы клиент открыл поток и сервер выдавал данные из базы данных во время чтения.

Таким образом, клиент может просто сидеть в цикле десериализации сообщений, пока не получит сообщение EOF от сервера, в стиле API потоковой передачи Twitter, но с конечным набором. Проблема, которую я имею, состоит в том, как вернуть поток и затем продолжать писать в него. Это возможно с WCF?

Ответы [ 3 ]

2 голосов
/ 29 августа 2010

Как насчет того, чтобы вместо настройки службы потоковой передачи / блокировки вы использовали что-то вроде WS Dual Http .С его помощью вы получаете асинхронный двунаправленный канал обратного вызова, который позволяет запрашивать / отвечать на информацию между сервером и клиентом.Проблемы, которые могут возникнуть при потоковой передаче всего набора, - это обычное явление: некоторые ресурсы могут блокировать другие запросы (или время ожидания), пока другие пользователи пытаются получить доступ к службе.

0 голосов
/ 02 декабря 2011

Возможно, вы захотите взглянуть на PollingDuplexHttpBinding (идентификатор уведомления может может : -)).

Некоторым это не очень нравитсясвязывания, но у меня не было особых проблем с этим после первоначального затруднения с настройкой конфигурации.

Это, безусловно, могло бы справиться с работой, так как я понимаю, что это немного больше, чем «длинный трюк опроса», используемый в веб-сокетах.

HTH.

0 голосов
/ 31 августа 2010

Проблема в том, что WCF не предоставляет поток ответа на операцию.Поток, возвращаемый из операции, является просто «содержимым» некоторого сообщения.Я пытался обмануть WCF с некоторыми сценариями потоков, где я возвращал MemoryStream и пытался заполнить его из другого потока, но, как и ожидалось, он не работал.

Упомянутый HttpHandler - единственный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...