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"
A simple solution is to use ASP.NET routing. See:
- http://blogs.msdn.com/b/rjacobs/archive/2010/04/05/using-system-web-routing-with-data-services-odata.aspx
- http://blogs.msdn.com/b/rjacobs/archive/2010/04/06/wcf-data-services-and-serviceroute.aspx
- http://blogs.msdn.com/b/rjacobs/archive/2010/04/08/wcf-data-services-odata-and-eliminating-the-svc-file.aspx
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).
精彩评论