1

I do have this WCF service contract:

[ServiceContract]
public interface IPolicyRetriever
{
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    Stream GetSilverlightPolicy();
}

with this Web.config section:

  <service behaviorConfiguration="policyRetrieverServiceBehavior" 
      name="WebService.PolicyRetriever">
    <endpoint address="" binding="webHttpBinding"
        behaviorConfiguration="policyRetrieverEndpointBehavior"
        contract="WebService.IPolicyRetriever" />
  </service>

The server is running on localhost, with Visual Studio web hosting, on port 8080 and the web service file is named WebService.svc.

The above code will make the GetSilverlightPolicy() method be exposed on http://localhost:8080/WebService.svc/clientaccesspolicy.xml.

What I need is to expose the file on the root of the webserver instead of the WebService.svc sub-path, but I could not find a way to accomplish this.

Setting the endpoint address property to / or http://localhost:8080/ did not work.

Neither adding a host section to the service node:

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8080/"/>
  </baseAddresses>
</host>

Did anyone find a solution?

John Saunders
  • 160,644
  • 26
  • 247
  • 397
Michele Di Cosmo
  • 491
  • 1
  • 5
  • 18

1 Answers1

1

You can achieve this as shown below:

Set your WCF project to support AspNetCompatiblityMode to true as shown below:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

Now open your code behind (class that implements the interface) and add the following attribute above your service class:

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Now Open your global.asax if you have one (else add one) and in the Application_Start method add the following line:

 RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(RestService)));

You can get rid of the svc file now. Once you do the above steps build your project and deploy to IIS. Now the URL of your web service would be

http://localhost/VirtualDirectoryName/clientaccesspolicy.xml 
Rajesh
  • 7,766
  • 5
  • 22
  • 35