我们需要从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;
}
答案 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。