Andrew Kalashnikov
Andrew Kalashnikov

Reputation: 3173

WCF transmit datatable as binary

I need fast transmit data from my wcf service to client. As SO helps, it means good binary serializer\derializer and data through List But I've got only XML text of DataTable serialized on service. It's big overhead.

Ok I should move to binary encoding of List. I haven't any DTO, just xml of DataTable. Could you help me with best practice

PS: At client I need datatable again for processing PSS: Http,Tcp bindings of wcf service.

Upvotes: 2

Views: 1696

Answers (2)

Marc Gravell
Marc Gravell

Reputation: 1064064

The first thing to try is to gzip the xml and aend via an mtom blob - simply a byte[] via wcf

If the XML is if a fixed schema, I would then consider writing some DTO translation code and send via protobuf-net and MTOM (reversing the translation at the other end).

I have an idea to pack adhoc datatables via protobuf-net but I haven't had chance to implement it yet which I discuss here: DataTable – life in the old beast?.

Upvotes: 4

Darin Dimitrov
Darin Dimitrov

Reputation: 1039428

Indeed the first step in optimizing is getting rid of the DataTables and introducing model objects. Once this is done you could configure your service endpoint to use netTcpBinding for optimized binary transfer. Remember that this binding is not interoperable with non .NET clients so you could also have a basicHttpBinding endpoint exposed in case you need this.

At the end of the day there should be only model objects involved in the exposed service methods (no DataTables and DataSets):

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

This being said I would recommend you performing load tests and proving that this is a bottleneck for your application before trying to prematurely optimize it.

Upvotes: 2

Related Questions