wcf-data-servicesastoria

How to programmatically configure WCF data services?


How would you configure the following WCF Data Services fluently in C#?

<configuration>

  ...

  <system.serviceModel>
    <services>
      <service name="Foo.WebServices.FooService">
        <endpoint address="http://localhost:8081/PhoenixData" 
                  binding="webHttpBinding" 
                  bindingConfiguration=""
                  contract="System.Data.Services.IRequestHandler" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>  
</configuration>

Solution

  • The following will configure an equivalent DataServiceHost, listening on endpoint uri.

    DataServiceHost CreateServiceHost(Uri uri)
    {
        var host = new DataServiceHost(typeof(FooDataService), new Uri[] { });
    
        // these may need to be added if they don't already exist.
        host.Description.Behaviors.Find<ServiceMetadataBehavior>().HttpGetEnabled = true;
        host.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true;
    
        host.AddServiceEndpoint(
            new ServiceEndpoint(ContractDescription.GetContract(typeof(FooDataService)))
                {
                    Name = "default",
                    Address = new EndpointAddress(uri),
                    Contract = ContractDescription.GetContract(typeof(IRequestHandler)),
                    Binding = new WebHttpBinding()
                });
    
        return host;
    }