В настоящее время у меня есть служба WCF с включенной потоковой передачей, что значительно уменьшило использование памяти клиентским приложением, но я хочу иметь возможность читать объекты в потоке, поскольку они десериализованы на клиенте, и вместо этого заполнить DataTable ожидания получения всех объектов, поскольку получение всех данных все еще занимает много времени.
Я прочитал эту статью , которая, кажется, имеет отношение к моей цели, но, кажется, устарела. Мне было интересно, если есть более современный способ достижения этого с помощью WCF 4.0.
Обновление:
Таким образом, я реализовал операцию в своем сервисе, используя метод, описанный в статье, приведенной выше, но я столкнулся с этим исключением во время выполнения:
Операция 'GetMyDtos' не может быть загружена, поскольку она имеет параметр или тип возврата типа System.ServiceModel.Channels.Message или тип, имеющий MessageContractAttribute и другие параметры различных типов. При использовании System.ServiceModel.Channels.Message или типов с MessageContractAttribute метод не должен использовать какие-либо другие типы параметров.
Моя операция имела следующую подпись:
Message GetMyDtos( bool param1, int? param2, bool param3 );
Итак, я изменил это на:
Message GetMyDtos( GetMyDtosParameters getMyDtosParameters );
и GetMyDtosParameters выглядит следующим образом:
[MessageContract]
public class GetMyDtosParameters
{
[MessageHeader]
public bool Param1 { get; set; }
[MessageHeader]
public int? Param2 { get; set; }
[MessageHeader]
public bool Param3 { get; set; }
}
Теперь все нормально работает на стороне службы, но у меня есть проблема при добавлении или обновлении ссылки на службу для клиента. Метод GetMyDtos
генерируется в клиенте без каких-либо параметров метода (и без перегрузок), поэтому я не могу передать какие-либо параметры в операцию службы.
Обновление 2:
Я могу получить результаты от службы, даже не передавая никаких параметров. Я предполагаю, что используются значения по умолчанию, так как они являются примитивами и / или Nullables. Однако я все же хотел бы иметь возможность совершать вызовы в службу с разными значениями параметров, но я не могу этого сделать.