Cirrus Minor Wiki


I wrote in the past how WCF defaults limit scalability but this thing (which had cost me two days of head scratching) is even worse.

Consider the following scenario: You have a WCF service/resource. when you get a message/request your codes needs to send another message to another service. Sounds common enough now doesn't it? and it is - unless you happen to use a service with   WebHttpBinding e.g. if you try to develop a RESTful WCF service or want to use POX services).  When you use WebHttpBinding and try to make a call within a call you are likely to find yourself staring at a ProtocolException with a 405 error - Method not allowed.

Turns out WCF finds itself confused by the Operation Context OperationalContextScope of the incoming request. So if you want things to work properly you need to create a new one:

 var webBinding = new WebHttpBinding();
 var channel = new ImContract(webBinding, controlUri);
 channel.Endpoint.Behaviors.Add(new WebHttpBehavior());
 var proxy = channel.CreateChannel();
 using( new OperationContextScope((IContextChannel) proxy)) {


I already spent the time figuring this bugger out- I hope this post will save you the trouble