Tuesday, 7 May 2013

HTTP_GET Enabled Metadata | WCF Tutorial pdf

We will use ServiceBehaviour to publish the metadata using HTTP-GET. This can be configures either administratively or Programmatically. Http and Https can expose by appending "?wsdl" to the end of the ser vice address. For example service address is http://localhost: 9090/MyCalulatorService , HTTP-Get metadata address is given by
http://localhost: 9090/MyCalulatorService?wsdl.

Administrative (Configuration file):
In the below mention configuration information, you can find the behavior section in the ServiceBehavior. You can expose the metadata using ServiceMetadata node with
httpGetEnable='True'.
<system.serviceModel>
  <services>
 <service behaviorConfiguration="ServiceBehavior" name="MyService">
    <endpoint address="http://localhost/IISHostedService/MyService.svc"
     binding="wsHttpBinding" contract="IMyService">
   <identity>
   <dns value="localhost"/>
   </identity>
     </endpoint>
 </service>
 </services>
 <behaviors>
   <serviceBehaviors>
 <behavior name="ServiceBehavior">
    <!-Setting httpGetEnabled you can publish the metadata -->
   <serviceMetadata httpGetEnabled="true"/>
   </behavior>
     </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Programming Model:
Using ServiceMetadataBehavior you can enable the metadata exchange. I n the following code, I have created the ServiceMetadataBehavior object and assigned HttpGetEnabled property to true.
Then you have to add the behavior to host description as shown. This set of code will publish the metadata using HTTP-GET.
 //Create a URI to serve as the base address
           Uri httpUrl = new
Uri("http://localhost:8090/MyService/SimpleCalculator");
           //Create ServiceHost
           ServiceHost host = new 
           ServiceHost(typeof(MyCalculatorService.SimpleCalculator),
httpUrl);
           //Add a service endpoint
           host.AddServiceEndpoint
           (typeof(MyCalculatorService.ISimpleCalculator), new
WSHttpBinding(), "");
           //Enable metadata exchange
           ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

           //Enable metadata exchange using HTTP-GET
           smb.HttpGetEnabled = true;

           host.Description.Behaviors.Add(smb);
           //Start the Service
           host.Open();
           Console.WriteLine("Service is host at " +
DateTime.Now.ToString());
           Console.WriteLine("Host is running... Press  key to stop");
           Console.ReadLine();

No comments: