Использование пользовательских WCF в приложенном приложении SharePoint

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/73762

Вопрос

Я пытался с несколькими днями, чтобы позвонить на заказ услугу WCF из приложения SharePoint Hosted. Я прочитал по всей информации, доступной на форумах, и я не смог найти рабочее решение.

Когда я звоню в мою собственную службу WCF из приложения для тестирования консоли, он работает отлично. Хотя, когда я называю это приложенным приложением SharePoint Hosted, я получаю ошибку «403 запрещенную». Я читал, это связано с тем, что AppWeb и HostWeb находятся в другом домене.

Поэтому я попробовал библиотеку «кросс-домен» JS, но мне не повезло, чтобы получить эту работу.

Я мог бы сделать что-то не так, может быть, некоторые из вас могут помочь ...

Вот код, который я использовал в моем AP, чтобы позвонить в службу:

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

Даже с библиотекой кросс-домена я все еще получаю 403 запрещенную ошибку.

Я также пытался добавить права на чтение в моем приложении к уровню сбора сайта.

Я отредактировал AppManifest.xml, чтобы добавить принцип приложения (который я нашел на MSDN http://msdn.microsoft.com/en-us/library/fp179927.aspx )

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

Все это не работало так далеко. Любая помощь будет приветствуется.

Это было полезно?

Решение

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top