设置ADO.NET数据服务提供程序的基址

时间:2013-02-11 19:49:55

标签: sharepoint ado.net wcf-data-services odata

我们正在使用ADO.NET Data Service Provider Toolkit来实现在SharePoint 2010中运行的自定义OData服务端点(使用.NET 3.5)。

当在网站集的根目录中访问服务时,返回的基址是正确的,例如,

 http://localhost/_vti_bin/service.svc/ returns a base address (in the returned atom document) as <feed xml:base="http://localhost/_vti_bin/service.svc />

但是当在子网站中访问服务端点时,将忽略其他路径段,例如

http://localhost/subsite/_vti_bin/service.svc/ returns a base address (in the returned atom document) as <feed xml:base="http://localhost/_vti_bin/service.svc />

不幸的是,这种不正确的行为会混淆PowerPivot(它似乎使用返回的基址来访问后续查询)。

有没有办法在提供程序代码中显式显示xml:base属性?

1 个答案:

答案 0 :(得分:0)

这可以通过使用相同的IDispatchMessageInspector trick(Pablo Castro用于支持JSON格式)并添加以下代码来纠正:

        HttpRequestMessageProperty httpmsg = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
        UriTemplateMatch match = (UriTemplateMatch)request.Properties["UriTemplateMatchResults"];

        match.RequestUri = new Uri(SPContext.Current.Web.Url + match.RequestUri.PathAndQuery, UriKind.Absolute);
        match.BaseUri = new Uri(SPContext.Current.Web.Url + match.BaseUri.AbsolutePath, UriKind.Absolute);

基本上更改Base和Request Uris以包含子站点路径。