I have a tech demo application to write, with multiple clients: web client (ASP MVC 3), desktop client (currently it\'ll be a WCF app, planning
I've built cross-platform apps before on Windows (specifically WPF / Silverlight clients, C# SQL Server back end) and what I've done is this.
This last step (shared assemblies) involves creating 1 project which is full C# compatible (so works on WPF Desktop or Server) and additional projects for each web client (Silverlight, WP7). To dual deploy code on multiple clients you have one copy of the source in the desktop assemblie and then "Add as Link" the same source files to Silverlight / WP7 assemblies. You will have to have a few #if preprocessor statements but by and large it is possible to dual deploy large chunks of code using this method.
Your stack becomes
Clients:
all clients have serialization, client side implementations of webservices/middleware and MVVM / MVC patterns
Middleware:
middleware implemetation on server / wpf desktop can be the same. Wp7 and monodroid etc will need to be different
Messages/DataContracts:
shared across all clients/server using the techniques I outlined above
Server:
All business logic, DB access and server-side middleware implementations. For DB Access I've used PetaPoco as an excellent MicroORM. I believe a microORM implementation powers stack overflow but I might be mistaken.
I would also take a look at this article for inspiration. It is possible - I've written client/server apps with SL/WPF clients and C# servers, also WPF client/Java servers using the above methods.
Best regards,