2012-12-29 2 views
2

Nous devons accéder à un site sharepoint 2007 depuis javascript. Fondamentalement, nous devons utiliser le service search.asmx mais comme il ne supporte pas le repos ni jsonp, il ne peut pas être utilisé directement.Comment faire un service de repos avec la capacité JSONP à exécuter dans Sharepoint 2007 (MOSS)?

Le plan d'origine était de faire un service wcf personnalisé avec le support pour repos et jsonp. C'était une petite entreprise mais quand j'ai donné le service aux gars de Sharepoint, aucun d'entre eux ne pouvait l'empaqueter dans un paquet wsp pour l'installer dans sharepoint 2007 et le faire fonctionner.

Selon cette question Rest Webservices for Sharepoint 2007 cela peut ne pas être si facile et un httpmodule est requis pour les URLs au repos. L'autre idée de l'exécuter en tant qu'application autonome peut ne pas suffire car je pense que le service a besoin d'accéder à SPContext.

Serait-il possible de créer simplement un Application Page et là dans le code derrière override Render, effacer le tampon de sortie, changer le type mime et rendre les données json-sérialisées? Donc l'url serait http://spsite/mycustomquery.aspx?q=mysearchtext&start=0&count=200&callback=mycallbackfunction.

Une page d'application prendrait au moins en charge Get, mais a-t-elle accès à SPContext?

Voici le service wcf avec lequel j'ai commencé.

contrat

[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); 
} 

mise en œuvre

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; 
    } 

Répondre

0

J'ai fini par créer une page aspx personnalisée et remplacer la méthode Render et json/jsonp en sortie et aussi changer le type de contenu en application/json. La solution et un fichier wsp prêt à être déployé sont disponibles ici http://www.filedropper.com/restqueryservice.

0

Vous pouvez essayer d'ajouter un fichier ".ashx" à votre solution qui implémente IHttpHandler. Selon ce blog article vous pouvez le faire en ajoutant une page d'application à votre solution, mais enregistrez-le comme une extension ".ashx". L'article est écrit pour SharePoint 2010 mais vous devrez vérifier si cela fonctionne pour 2007. Suite au reste de l'article, vous devriez pouvoir le configurer pour REST/JSONP.

+0

Merci pour la suggestion. Ressemble à ce que j'ai suggéré ici (http://stackoverflow.com/questions/14092364/can-i-change-mime-type-and-rendered-output-in-application-page-in-sharepoint-200). Apparemment, Ashx n'est pas autorisé dans Moss par défaut. – MathiasR

+0

@MathiasR Vous avez raison d'être bloqué par défaut mais il est possible de [débloquer] (http://blogs.technet.com/b/sharepointcomic/archive/2009/01/07/blocked-file-types-in -sharepoint.aspx) eux. – skeletank

Questions connexes