Otis wrote:
WCF binary serialization is still xml but sent binary. The only real binary serialization is remoting with the binary formatter.
Yes I agree... when we talk about binary and the TCP binding, we're in fact talking about binary encoding on the wire... but XML serialization (and xml deserialization) indeed occurs before (and after)
Otis wrote:
It's however not a matter of serialization techniques, but how you want to setup your services. In general, SOA is about having services as independent applications with an interface which listens to messages. At that level, the serialization system doesn't really matter as it's not 'chatty' and doesn't involve large blocks of data.
Yes again I agree... However Microsoft sold the whole WCF story as a unification of communications on the Microsoft plateform (and above, when interoperable configuration is used), and not necessarily only in the most pure SOA form. That said, they talked about WCF as beeing a replacement for all Microsoft legacy technologies, be it ASMX web services, DCOM or .NET Remoting. However we can see that this is not the case (at least not by default) as WCF uses only XML Serialization thus making it much less efficient that .NET Remoting + binary serialization. Microsoft even published a paper showing that WCF is performing better than .NET Remoting!! see: http://msdn.microsoft.com/en-us/library/bb310550.aspx However when you see the details, the test is done on the following contract:
public interface IRemoteObject
{
[OperationContract]
byte [] GetRBytes(int NumBytes);
}
So OK... This example does not require big work for what serialization is concerned!! So the test only says that WCF performs better for transport on the wire... nothing related to what happen before or after. I guess they want to sell the whole WCF story while hidding some precious details... and bad surprises...
Anyway... WCF is extensible. By default using the DataContractSerializer. I guess it should be possible to replace the DataContractSerializer by the Llblgen FastSerializer used for remoting. That would make doing distributed application with WCF as fast as (or faster since apparently WCF more efficient on the wire) with Remoting. Ok would not be interoperable and not follow SOA principles, but would help do everything with the WCF stack, + also would allow passing predicates though WCF since now using the Llblgen serializer... Does that make sense?
Ok in the mean time I will just use .NET Remoting