Contract inheritance (via CLR interface inheritance) is pretty cool allowing you to support versioning and contract aggregation in WCF, the catch though is if you have a Duplex interface then the callback interface must follow the same hierarchy. So if your primary interface say is IMyInterface which inheritances from ISomeInterfaceOne and ISomeInterfaceTwo, then the callback interface also needs to have the same chain or you will get an InvalidContractException. Here is an example from MSDN:

1
2
3
4
5
6
[ServiceContract(CallbackContract = IACallback)]  
interface IA : IB {}  
interface IACallback : IBCallback {}  
[ServiceContract(CallbackContract = IBCallback)]  
interface IB {}  
interface IBCallback {}