My initial thoughts of WCF were exactly the same! Here are some solutions:
- Program your own proxy/client layer utilising generics (see classes ClientBase, Binding). I've found this easy to get working, but hard to perfect.
- Use a third party implementation of 1 (SoftwareIsHardwork is my current favourite)