如何使用JSONP功能使Rest服务在Sharepoint 2007(MOSS)中运行?

时间:2012-12-29 11:09:02

标签: rest sharepoint-2007 jsonp moss

我们需要从javascript访问sharepoint 2007网站。基本上我们需要使用search.asmx服务,但由于这不支持rest或jsonp,因此无法直接使用。

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

根据这个问题Rest Webservices for Sharepoint 2007,这可能不那么容易,并且对于其他类型的网址需要httpmodule。将其作为独立应用程序运行的另一个想法可能还不够,因为我认为该服务需要访问SPContext。

是否可以只创建一个Application Page并在代码后面覆盖Render,清除输出缓冲区,更改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;
    }

2 个答案:

答案 0 :(得分:0)

您可以尝试将“.ashx”文件添加到实施IHttpHandler的解决方案中。根据此blog article,您可以通过向解决方案添加应用程序页面来执行此操作,但将其另存为“.ashx”扩展名。本文是为SharePoint 2010编写的,但您必须检查它是否适用于2007.在本文的其余部分,您应该能够为REST / JSONP进行设置。

答案 1 :(得分:0)

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

可在此处找到解决方案和可随时部署的wsp文件http://www.filedropper.com/restqueryservice