Лучшие практики для потокового ответа веб-службы WCF - PullRequest
4 голосов
/ 08 марта 2010

Я пытаюсь извлечь большой объем данных из веб-службы WCF. Запрос довольно маленький, и ответное сообщение будет очень большим. В настоящее время веб-служба генерирует исключения SystemOutOfMemory из-за ограничения на IIS6 для памяти, которую она может выделить (~ 1,4 ГБ).

Я читал в некоторых блогах, что реализация потоковой передачи решит мою проблему.

Кто-нибудь может поделиться своим опытом с этой темой? Меня больше всего интересует любой пример кода на стороне клиента и на стороне службы, которым можно поделиться, или любые рекомендации / лучшие практики. MemoryStream против FileStream? Тип возврата должен быть Stream, Message, Byte []?

Моя операция выглядит следующим образом: (обычно она возвращает большое количество элементов в массиве ответов, ~ 200K элементов)

MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)

1 Ответ

4 голосов
/ 08 марта 2010

Если вы хотите перенаправить только ответ, используйте transferMode=streamedResponse в вашей конфигурации привязки. Это гарантирует, что будет возвращен только возвращенный ответ.

Возвращаемое значение функции потоковой передачи должно быть Stream. Затем вы можете читать из этого потока и делать с ним все, что вам нужно (сохранить его, проанализировать, что угодно).

Так что в принципе у вас будет контракт на обслуживание, примерно такой:

[ServiceContract]
interface IYourService
{
    [OperationContract]
    Stream GetData(SmallSizeRequestClass request);
}

На сервере вы в основном просто записываете в поток, а на клиенте вы читаете из потока.

Вы обращались к документации MSDN по Потоковое вещание WCF ?

...