I was surprised to read in multiple places words that seemed to indicate that .NET Remoting remains the recommended technology over Windows Communication Framework (formerly Indigo) for cross-AppDomain communication.

It seems to me that, especially when using AppDomains to host independently developed (and potentially malicious) add-ins, WCF would have significant benefits over .NET Remoting.

For one thing, it would no longer be necessary to jump through hoops to get the add-in's AppDomain to find the host's "remote assembly"; instead, the add-in would ship its own [ServiceContract] and assorted types.

Another benefit would be security. The current documentation is full of caveats saying "Make sure you don't leak any of the add-in's objects into the host AppDomain!" WCF would eliminate this threat completely, since it does not support passing object references around. Also, there would be no need to load trusted assemblies into the add-in's AppDomain, thus reducing the attack surface.

Thirdly, versioning would be more flexible.

Is the current recommendation just because of performance? Is it just that WCF has not (yet) been optimized for in-proc communication? I don't see why Remoting should necessarily be faster than WCF, when optimized.

Perhaps the general observation is: use CLR types when staying inside the AppDomain; use XSD/WSDL when crossing AppDomains/processes/machines/admin domains.