如何更改 WCF 数据服务发布的 xml:base?

Posted

技术标签:

【中文标题】如何更改 WCF 数据服务发布的 xml:base?【英文标题】:How can I change the xml:base published by a WCF Data Service? 【发布时间】:2011-02-26 18:58:45 【问题描述】:

我有一个 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" 

【问题讨论】:

【参考方案1】:

一个简单的解决方案是使用 ASP.NET 路由。 见:

    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

【讨论】:

【参考方案2】:

要实现这一点,您需要为 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)。

【讨论】:

以上是关于如何更改 WCF 数据服务发布的 xml:base?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 WCf 服务的 wsdl 文件中的默认模式位置?

WCF 更改凭据

如何覆盖或向单独类中的方法添加属性,以便刷新 WCF 服务不会影响我的更改?

一个WCF服务中的更改应更新相同WCF服务的其他实例中的相同更改

如何更改 WCF 中的限制并发线程(核心 20 个线程)?

如何更改 wcf 客户端中的时间戳安全标头?