Как служба WCF может возвращать большие объемы данных? - PullRequest
1 голос
/ 27 февраля 2009

Я работаю над веб-приложением, которое передает данные в пользовательское клиентское приложение.

Я получаю исключения, когда данные превышают какой-то "маленький" размер. Поскольку конечные пользователи, вероятно, будут использовать все большие объемы данных, я переключил возврат с функции WCF на идентификатор набора данных.

Затем я преобразовал клиент для использования идентификатора для получения данных с какой-то простой страницы ASPX. Это работает нормально, но означает несоответствие в интерфейсе.

  1. Редактировать: я не уверен, как я пропустил возврат потока, но я сделал. У кого-нибудь есть проблемы с потоками через WCF?

  2. Есть ли проблемы с чтением файлов через потоки HTTP со страницы ASPX, кроме разорванного соединения?

Я бы предположил, что мне не хватает возможности WCF (например, данных oob). Но в то же время он-лайн справка по C # / .NET либо очень плохая, либо серьезно сломана, как установлено на моей машине.

Спасибо.

[Редактировать] Кстати, в моем случае «большой объем данных» определяется пользовательским вводом, но должен быть не менее 20 МБ.

Ответы [ 5 ]

3 голосов
/ 09 марта 2009
0 голосов
/ 16 июля 2010

Настройка maxItemsInObjectGraph на стороне клиента и на стороне сервера работала для меня.

(Не забывайте, на стороне клиента.) http://social.msdn.microsoft.com/Forums/en/wcf/thread/0af69654-2d89-44f3-857a-583b57844ca5

0 голосов
/ 14 октября 2009

Как я понимаю, статья Large Data and Streaming , упомянутая @Eugene, для всех видов связи необходимо переключить транспортный режим, то есть отключить некоторые проверки целостности.

Следовательно, я использовал полу-пользовательский класс HTTP-клиента, где:

  • Загрузки использовать страницы ASPX, которые возвращают данные и направляют их на файл на диске клиентского приложения,
  • Загружает отправляет файл на страницу ASPX, которая генерирует GUID и сохраняет файл на диск сервера с этим GUID как часть его имени. Тогда вызывает метод WCF для передачи других параметров с GUID вместо данные файла.

Это не красиво, но работает. К сожалению, сбой IIS или клиентского приложения может оставить временные файлы на жестком диске сервера, но они локализованы и могут быть убрал при создании сервиса.

0 голосов
/ 11 мая 2009

вы можете перейти по этому адресу http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution.aspx, Я не думаю, что он подходит для вашего ПК, но это тоже идея.

0 голосов
/ 09 марта 2009

Какое исключение вы видите? Не можете ли вы прочитать XML, потому что квота считывателя превышена?

Если так, думаю, я знаю, что может это исправить. Ниже приведен пример wsHttpBinding. Ваше исключение должно помочь вам определить, какой параметр необходимо исправить. Вы можете maxReceivedMessageSize и квоты для читателя. Дайте мне знать, если это не сработает, и, пожалуйста, предоставьте больше данных.

<wsHttpBinding>
    <binding name="bindingName" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536">
      <readerQuotas maxDepth="32" maxStringContentLength="3145728" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    </binding>
</wsHttpBinding>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...