I’ve been playing with the January CTP of WCF, and I’ve encountered what seems like a pretty major setback. I’ve got an interface that takes a MessageContract and returns a MessageContract. All well and good. But then I want to use the AsyncPattern on the service side, so that my routine will get called on a different thread from the one that’s listening on the network. So I decorate the interface like so:
public interface IThingy
IAsyncResult BeginSignon(ThingyRequestMessage<SignOnRequest> request, AsyncCallback cb, object state);
ThingyResponseMessage<SignOnResponse> EndSignon(IAsyncResult ar);
Now I get an exception at runtime, which says that I can’t mix parameters and messages for the method “EndSignon”. What it means is that if I return a MessageContract instead of a primitive type, my method has to take a MessageContract and not one or more primitive types. OK, I get that. But my EndSignon method is getting flagged because it takes an IAsyncResult (as it must according to the AsyncPattern) and returns a ThingyResponseMessage.
Does this mean I can’t use MessageContracts with the AsnycPattern? If so, LAME. If not, then what am I missing?