Another WCF Gotcha: Calling Another Service/Resource Within a Call
</p>
![](https://eu-images.contentstack.com/v3/assets/blt69509c9116440be8/bltc0182b2356ae8eed/64b83949410a1b4c0bd7459b/IW_generic_image.png?width=1280&auto=webp&quality=95&format=jpg&disable=upscale)
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 starring 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 for the request
var webBinding = new WebHttpBinding(); var channel = new ChannelFactory<ImContract>(webBinding, controlUri); channel.Endpoint.Behaviors.Add(new WebHttpBehavior()); var proxy = channel.CreateChannel(); using( OperationContextScope((IContextChannel) proxy)) { proxy.Dostuff() }
I already spent the time figuring this bugger out. I hope this post will save you the trouble.
About the Author(s)
You May Also Like