Использование пользовательских WCF в приложенном приложении SharePoint
-
10-12-2019 - |
Вопрос
Я пытался с несколькими днями, чтобы позвонить на заказ услугу 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.