2010-10-12 2 views
2

Мне нужна быстрая передача данных из моей службы wcf клиенту. Поскольку SO помогает, это означает хороший двоичный serializer \ derializer и данные через List Но у меня есть только XML-текст DataTable, сериализованный на службе. Это большие накладные расходы.WCF передают данные как двоичные

ОК Я должен перейти к двоичному кодированию списка. У меня нет DTO, просто xml DataTable. Не могли бы вы помочь мне с наилучшей практикой

PS: На клиенте мне нужно снова использовать данные для обработки PSS: Http, Tcp привязки службы wcf.

+1

DataTable = накладные расходы. Если вам нужна скорость, вам нужна гораздо более простая модель для хранения ваших данных. – Will

+0

Если вы можете предоставить подробную информацию о схеме DataTable, я * мог бы * реализовать ее как образец protobuf-net. –

+0

Я сделал некоторое дополнительное расследование этого; см. [DataTable - жизнь в старом зверю?] (http://marcgravell.blogspot.com/2010/10/datatable-life-in-old-beast.html), который может дать вам больше информации, чтобы сделать осознанный выбор. –

ответ

2

Действительно, первым шагом в оптимизации является избавление от DataTables и введение объектов модели. Как только это будет сделано, вы можете настроить конечную точку службы для использования netTcpBinding для оптимизации бинарного переноса. Помните, что эта привязка не совместима с клиентами не .NET, поэтому вы также можете открыть конечную точку basicHttpBinding, если вам это нужно.

В конце дня должен быть только объектами модели, участвующие в открытых методах обслуживания (без DataTables и DataSets):

[ServiceContract] 
public interface IMyServiceContract 
{ 
    [OperationContract] 
    SomeModel[] GetModels(); 
} 

Это, как говорится, я бы порекомендовал вам выполнять нагрузочные тесты и доказать, что это является узким местом для вашего приложения, прежде чем пытаться его преждевременно оптимизировать.

+0

Nettcpbinding очень раздувается в реальном выражении. Эффективность в целом значительно преувеличена. –

+0

Дарин, спасибо за ответ. Но у меня много устаревшего кода, который использует datatable. Я не могу избежать их, вводя объекты модели. –

4

Первое, что нужно попробовать это GZIP XML-и aend через MTOM сгустка - просто байт [] с помощью ФОС

Если XML, если фиксированная схема, я бы тогда рассмотреть написание некоторых DTO код перевода и посылать через protobuf-net и MTOM (реверсирование перевода на другом конце).

У меня есть идея, чтобы упаковать ADHOC DataTables через Protobuf-сети , но у меня не было возможности реализовать его еще, которые я обсуждаю здесь: DataTable – life in the old beast?.

+1

Марк снова благодарен !!! Ваш ответ прекрасен. Я попробую gzip с mton и отслеживать изменения protobuf-net –

+0

http://marcgravell.blogspot.com/2010/10/datatable-life-in-old-beast.html :-) – Patrik

+0

@Patrik - да, эта ссылка выглядит странно знакомый. Я уже добавил его в качестве комментария к * вопросу *. –

Смежные вопросы