I created a web service for which I am trying to provide 3 endpoints with different bindings.
1. basicHttpBinding,
2. wsHttpBinding,
3. webHttpBinding
When I make the service reference, I get only the endpoints with the basicHttpBinding and wsHttpBinding bindings created. I don’t get webHttpBinding. What could possibly wrong.
Here’s the structure of the serviceModel node in web.config.
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/>
</diagnostics>
<services>
<service behaviorConfiguration="VersionTolerance.Service1Behavior" name="BookShop.BookShopService">
<endpoint address="sadha" binding="basicHttpBinding" contract="BookShop.IBookShopService" />
<endpoint address="ws" binding="wsHttpBinding" contract="BookShop.IBookShopService" >
</endpoint>
<endpoint address="web" binding="webHttpBinding" behaviorConfiguration="webHttpBehavior"
contract="BookShop.IBookShopService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:49654/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="VersionTolerance.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
There’s nothing wrong – that’s just the way it works!
basicHttpBindingandwsHttpBindingare SOAP bindings that expose metadata about their service – your Visual StudioAdd Service Referencecan interrogate their endpoints, find out what they’re called, what methods they offer, what data types they expect as parameters and what they return.webHttpBindingis REST – and REST by default doesn’t have a concept of metadata – you won’t get a service description, list of methods etc. – REST is all about resources – not methods.So therefore, when you do a
Add Service Reference, you get proxy clients for the SOAP endpoints – but not for the REST /webHttpBindingendpoint. Works as designed.The WCF Data Services – built on top of REST – offer a similar experience to the SOAP bindings, in that you can do an
Add Service Referenceand get a nice client side proxy and all – and this is done since the OData protocol defines a metadata exchange on top of REST. So if you can turn your REST service into a WCF Data Service, you’d be fine again.Otherwise, with REST, you just have to “know” (from a documentation page or something) what the resource URI’s for your REST service are, and what the HTTP verbs do in your REST context.