我有一个WCF数据服务,我有一个自定义URL重写器,因此真正的URL不可见,我可以在路径中添加特殊元素进行自定义。
例如:
http://localhost/Data/ABCD.odata/
映射到:
http://localhost/Data/OneData.svc/
这几乎可以正常工作,除了服务在响应XML中发布它所在的真实路径,因此像PowerPivot for Excel这样的应用程序正在查看该URL并在该URL上进行第二次点击而不是在我想要的那个URL上。
所以问题是如何强制服务在xml:base中发布自定义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>
我希望发布:
<service xml:base="http://localhost/Data/ABCD.odata/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"
答案 0 :(得分:0)
要实现这一点,您需要为WCF数据服务提供自定义托管。一个例子是这个博客的一部分。查看有关IDataServiceHost接口实现的部分。 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
诀窍是提供正确的AbsoluteRequestUri和AbsoluteServiceUri属性值。这些是服务用于写入响应的值(包括xml:base)。
答案 1 :(得分:0)
一个简单的解决方案是使用ASP.NET路由。 参见: