Question

J'ai essayé depuis quelques jours pour appeler un service WCF sur mesure d'une application hébergée SharePoint. J'ai lu sur les informations disponibles sur les forums et je n'ai pas pu trouver une solution de travail.

Lorsque j'appelle mon service WCF personnalisé d'une application de console de test, cela fonctionne parfaitement. Bien que lorsque je l'appelle avec une application hébergée SharePoint, je reçois une erreur "403 interdite". J'ai lu que cela a à voir avec le fait que l'appwebweb et la hostweb sont dans un domaine différent.

J'ai donc essayé la bibliothèque JS "Cross-Domain", mais je n'avais pas de chance pour obtenir ce travail.

Je pourrais faire quelque chose de mal, peut-être que certains d'entre vous peuvent vous aider ...

Voici le code que j'ai utilisé dans mon AP pour appeler le service:

var hostweburl;
var appweburl;

$(document).ready(function () {
    hostweburl = decodeURIComponent(getParameterByName('SPHostUrl'));
    appweburl = decodeURIComponent(getParameterByName('SPAppWebUrl'))

    var scriptbase = hostweburl + "/_layouts/15/";
    $.getScript(scriptbase + "SP.RequestExecutor.js", CallService);
});

function CallService()
{
var exec;
exec = new SP.RequestExecutor(appweburl);
exec.executeAsync(
    {
        url: appweburl + "/_vti_bin/CSN.DataService/DataService.svc/GetData?query=QueryHere",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (msg) {
            alert(msg);
        },
        error: function (data, errorCode, errorMessage) { alert('Error: ' + errorMessage); }
        });
}

Même avec la bibliothèque croisée, je reçois toujours une erreur interdite 403.

J'ai également essayé d'ajouter des droits de lecture dans mon application au niveau de la collecte du site.

J'ai modifié l'appmanifest.xml pour ajouter une application principale (que j'ai trouvée sur msdn http://msdn.microsoft.com/en-us/library/fp179927.aspx )

<AppPrincipal>
    <Internal AllowedRemoteHostUrl="~remoteAppUrl" />
</AppPrincipal>

Tout cela n'a pas fonctionné jusqu'à présent. Toute aide sera accueillie.

Était-ce utile?

La solution

I have found a work around.

I deployed my custom WCF to IIS instead of deploying it into SharePoint (ISAPI). I had to make the WCF service public (to be able to call it cross-domain) by adding this code into the WCF's web.config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
   </httpProtocol>
</system.webServer>

I then deployed the WCF to IIS and from there I have been able to call if from a standard Jquery Ajax Call:

$(document).ready(function () {

    $.ajax({
        type: "GET",
        url: "http://services.ca/SQLService/DataService.svc/GetData?query=query",
        dataType: 'json',
        processdata: true,
        success: function (msg) {
            var JSONmsg = JSON.stringify(msg);

            var Response = document.getElementById('ServiceResponse');
            Response.innerText = JSONmsg;


        },
        error: function (data, errorCode, errorMessage) {
            alert('Error: ' + errorMessage);
        }
    });
});

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top