O/W operations require to be invoked through the ISimplex contracts which represent O/W channel shapes.
When I say O/W operations, I mean that the channel shape reflects that too.
E.g. TCP protocol is by nature a duplex channel, you should invoke O/W operations through IDuplexSessionRouter contract.
I couldn’t manage to call a O/W operation for a back-end service which is exposed with WsHttpBinding with Reliable Session enabled! That is the second point of failure.
In addition, At my router facade I have rich meta data regarding the target back-end service and operation by managing information from the service registry in an optimized manner.
This means that according to the ‘To’ header and the message ‘Action’, I can determine if the target operation is one-way or not in runtime.
Unfortunately, I didn’t find a way to intervene and control the channel shape that the router service uses to call the back-end service with.
This means that I still have to expose the relevant contract for each endpoint in the router service without having the ability to control it down the calling chain, that is the third point of failure.
That’s just too bad, this means that the client needs to talk to different endpoints if the operation itself requires O/W or not. if there’s a service implemented with a contract that has both R/R and O/W operations, the client can’t call it using the same proxy. (I guess you can manage the address of the proxy each call to direct it to a different address but that brings up a whole other set of issues)
Concluding failure points so far:
- WebHttp isn’t supported as much as I could tell
- I didn’t succeed with calling a O/W operation on a back-end service exposed with WsHttpBinding and Reliable Session enabled
- I didn’t find a way to control the contract of the channel shape used by the router service down the chain when calling to the back-end service. That prevented me from controlling the invocation pattern if I have more information regarding the target back-end service and operation.
I will continue with the series of posts where I will discuss what I believe to be missing furthermore. However, I do know for sure that I can’t be using this as the base implementation for our base router facade instead of the one I had written which does support all of these things.