#c# #wcf
#c# #wcf
Вопрос:
Я новичок в службе WCF. Я создал простой asp.net веб-приложение и вызвал веб-службу администратора SharePoint для создания сайта. Ниже приведен код.
protected void btnSubmit_Click(object sender, EventArgs e)
{
CreateSiteClass objCreateSiteClass = new CreateSiteClass();
objCreateSiteClass.CreateSite(txtSiteName.Text);
}
[WebServiceBindingAttribute(Name = "AdminSoap", Namespace = "http://schemas.microsoft.com/sharepoint/soap/")]
public class CreateSiteClass : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public void CreateSite(string str)
{
try
{
AdminService.Admin admService = new AdminService.Admin();
//admService.Credentials = System.Net.CredentialCache.DefaultCredentials;
admService.Credentials = new System.Net.NetworkCredential("ashish.rautela", "badri@12345", "IRISSOFTWARE");
admService.CreateSite(str, "Title", "Description", 1033, "STS#0", "IRISSOFTWARE\ashish.rautela", "Ashish Rautela", "ashish.rautela@irissoftware.com", "", "");
}
catch (System.Web.Services.Protocols.SoapException ex)
{
Console.WriteLine(ex.StackTrace);
}
}
}
Сайт был успешно создан (независимо от того, что вы передадите в параметре функции)
Но мое требование заключается в использовании этой службы внутри службы WCf. Итак, я создал приложение WCF и написал ту же функцию в моем классе Service1, который реализует интерфейс IService1.
Служба WCF была успешно собрана, и когда я просмотрел ее после создания виртуального каталога, она выдала мне следующий путь:-
http://vm-sp-vishal.irissoftware.com:8888/WCFSiteCreateor/Service1.svc?wsdl
После этого я создал простой asp.net веб-приложение и добавил ссылку на службу в свой проект, щелкнув правой кнопкой мыши -> Добавить ссылку на службу. Затем я написал следующий код в моем default.aspx.cs
protected void btnid_Click(object sender, EventArgs e)
{
TestService(txt.Text);
}
protected void TestService(string strUrl)
{
MyWCFAdminService.Service1Client objMyWCFAdminService = new MyWCFAdminService.Service1Client();
objMyWCFAdminService.SiteCreatorClass(strUrl);
}
Но когда я запускаю это приложение и передаю параметр функции в текстовое поле, оно выдает ошибку «Отказано в доступе».
Я являюсь администратором фермы на сервере SharePoint, где я запускаю этот код.
Любая помощь?
Комментарии:
1. под какой учетной записью пользователя запускается служба wcf? есть ли у нее необходимый доступ для выполнения процессов, связанных с sharepoint? Попробуйте создать отдельный пул приложений и установить для этого пула требуемый идентификатор. (учитывая, что вы разместили WCF в IIS)
2. Учетная запись пользователя, которую она использует, является членом группы администраторов фермы. У него есть необходимый доступ к процессу SharePoint, поскольку он успешно выполнялся без вызова того же фрагмента внутри WCF. Я полагаю, что у моей службы WCF нет прав на операцию записи в SharePoint.
Ответ №1:
похоже, вам нужно разобраться в своих политиках доступа, поскольку вы будете переходить на междоменный…
вам может понадобиться файл clientaccesspolicy.xmlm в корневом каталоге ваших служб wcf (или служб sdharepoint)
его содержимое должно быть примерно таким
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*"/>
</allow-from>
<grant-to>
<resource include-subpaths="true" path="/"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Очевидно, что это небезопасно 😉 я позволю тебе разобраться с этим.