views:

46

answers:

2

Hi,

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"&gt;
  <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" 
A: 

Hi,

To achieve that you need to provide a custom hosting for your WCF Data Service. An example is part of this blog. Look at the part about IDataServiceHost interface implementation. http://blogs.msdn.com/b/tom_laird-mcconnell/archive/2010/01/18/using-ado-net-wcf-data-services-for-streaming-infinite-event-result-sets.aspx

The trick is to provide the right AbsoluteRequestUri and AbsoluteServiceUri property values. These are the values which will be used by the service to write the response with (including the xml:base).

Vitek Karas MSFT