2

我们需要从 javascript 访问一个 sharepoint 2007 站点。基本上我们需要使用 search.asmx 服务,但由于它不支持 rest 也不支持 jsonp 它不能直接使用。

最初的计划是制作支持rest和jsonp的自定义wcf服务。这是一项小任务,但是当我将服务提供给 Sharepoint 的人时,他们都无法将其打包到 wsp 包中以便在 sharepoint 2007 中安装并使其正常工作。

根据这个问题Rest Webservices for Sharepoint 2007这可能不是那么容易,rest-typed urls 需要一个 httpmodule。将其作为独立应用程序运行的另一个想法可能还不够,因为我认为该服务需要访问 SPContext。

是否可以只创建一个应用程序页面并在代码中覆盖渲染,清除输出缓冲区,更改 mime 类型并渲染 json 序列化数据?所以网址是http://spsite/mycustomquery.aspx?q=mysearchtext&start=0&count=200&callback=mycallbackfunction.

应用程序页面至少会支持 Get,但它是否有权访问 SPContext?

这是我开始使用的 wcf 服务。

合同

[ServiceContract]
public interface IRestSPQuery
{
    [OperationContract]
    [WebGet(UriTemplate = "query/{queryText}/{startAt}/{count}?callback={callback}", ResponseFormat = WebMessageFormat.Json)]
    [JSONPBehavior(callback = "callback")]
    ResultTable Query(string queryText, string startAt, string count, string callback);
}

执行

    public ResultTable Query(string queryText, string startAt, string count, string callback)
    {
        //http://sharepointsite/_vit_bin/CustomQuery/RestSPQuery.svc/Query/searchtext/0/200?callback=myfunction

        KeywordQuery keywordQuery = new KeywordQuery(SPContext.Current.Site);
        keywordQuery.StartRow = startAt;
        keywordQuery.RowLimit = count;
        keywordQuery.SortList.Add("Rank", SortDirection.Descending);
        keywordQuery.QueryText = queryText;
        ResultTableCollection searchResults = keywordQuery.Execute();
        ResultTable relevantResultsTable = searchResults[ResultType.RelevantResults];
        return relevantResultsTable;
    }
4

2 回答 2

0

您可以尝试将“.ashx”文件添加到实现IHttpHandler. 根据这篇博客文章,您可以通过将应用程序页面添加到您的解决方案来做到这一点,但将其保存为“.ashx”扩展名。这篇文章是为 SharePoint 2010 编写的,但您必须检查它是否适用于 2007。在文章的其余部分之后,您应该能够为 REST/JSONP 设置它。

于 2013-01-04T21:44:39.297 回答
0

我最终创建了一个自定义 aspx 页面并覆盖了 Render 方法并在那里输出 json/jsonp 并将内容类型更改为 application/json。

可以在这里找到解决方案和准备部署的 wsp 文件http://www.filedropper.com/restqueryservice

于 2013-01-10T07:20:27.377 回答