Another WCF Gotcha: Calling Another Service/Resource Within a Call
You have a WCF service/resource. when you get a message/request your codes needs to send another message to another service.
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:<br />
You have a WCF service/resource. when you get a message/request your codes needs to send another message to another service. <br />
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<br />
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px">var webBinding <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px">=</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px">new</span> WebHttpBinding();<br />var channel <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px">=</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px">new</span> ChannelFactory<ImContract>(webBinding, controlUri);<br />channel.Endpoint.Behaviors.Add(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px">new</span> WebHttpBehavior());<br />var proxy <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px">=</span> channel.CreateChannel();<br /><strong><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px">using</span>( OperationContextScope((IContextChannel) proxy))</strong><br />{<br /> proxy.Dostuff()<br />}</span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px">I already spent the time figuring this bugger out. I hope this post will save you the trouble.</span>
<br />

