Вызов веб-службы Sharepoint в службе WCF

#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>
  

Очевидно, что это небезопасно 😉 я позволю тебе разобраться с этим.