Search code examples
.netwcf-ria-serviceswcf-data-serviceswcf-rest

How can I change the xml:base published by a WCF Data Service?


I have a WCF Data Service for which I have a custom URL Rewriter so the real url is not visible and I can add special elements in the path for customizing it.
For example:
http://localhost/Data/ABCD.odata/
Maps to:
http://localhost/Data/OneData.svc/

This almost works except that the service is publishing back in the response XML the real path where it is located thus apps like PowerPivot for Excel is looking at that URL and doing the second hit on that URL not on the one I want.

So the question is how can I force the service to publish in the xml:base a custom url.

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<service xml:base="http://localhost/Data/OneData.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
  <workspace>
    <atom:title>Default</atom:title>
    <collection href="Products">
      <atom:title>Products</atom:title>
    </collection>
  </workspace>
</service>

I want that to publish:

<service xml:base="http://localhost/Data/ABCD.odata/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" 

Solution

  • A simple solution is to use ASP.NET routing. See:

    1. http://blogs.msdn.com/b/rjacobs/archive/2010/04/05/using-system-web-routing-with-data-services-odata.aspx
    2. http://blogs.msdn.com/b/rjacobs/archive/2010/04/06/wcf-data-services-and-serviceroute.aspx
    3. http://blogs.msdn.com/b/rjacobs/archive/2010/04/08/wcf-data-services-odata-and-eliminating-the-svc-file.aspx