Доступ запрещен при доступе к API SharePoint из приложения MVC - PullRequest
0 голосов
/ 07 октября 2011

При попытке получить доступ к сайту SharePoint 2010 через API SharePoint из приложения ASP.NET MVC появляется следующая ошибка:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

Приложение MVC размещается на IIS7 в 64-разрядном режиме с пользователем пула приложений, который является администратором сайта в установке SharePoint. Важно, что служба WCF, вызывающая API-интерфейс SharePoint, размещенный в том же веб-приложении, работает без проблем , поэтому мне кажется странным, что я не могу получить те же результаты в действии контроллера.

Я пробовал:

  • Настройка System.web/identity impersonate="true" etc etc
  • Настройка System.web/authentication mode="Windows"
  • Сочетание вышеперечисленного.

Независимо от того, что было описано выше, System.Security.Principal.WindowsIdentity.GetCurrent().Name возвращает ожидаемого пользователя пула приложений, но Request.IsAuthenticated возвращает false. Это проверяется как программно, с помощью отладчика, так и в журнале событий:

Event code: 4011 
Event message: An unhandled access exception has occurred. 
...
Process information: 
    Process ID: 1234 
    Process name: w3wp.exe 
    Account name: VALIDDOMAIN\VALIDUSER 

Request information: 
    Request URL: http://localhost:2000/Service/ 
    Request path: /Service/ 
    User host address: ::1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: VALIDDOMAIN\VALIDUSER 

Как вызвать API-интерфейс SharePoint 2010 из стандартного действия контроллера веб-приложения MVC3?

ОБНОВЛЕНИЕ 01:

Вот код, который я использую:

    using (SPSite site = new SPSite(siteUrl))
    {
        workflow.SPSiteCollectionID = site.ID;

        using (SPWeb web = site.OpenWeb())
        {
            foreach (SPGroup group in web.SiteGroups)
            {
                //some code
            }
        }
    }

Это сбой на линии foreach (SPGroup group in web.SiteGroups)

1 Ответ

2 голосов
/ 11 октября 2011

Попробуйте это: новый SPSite (siteUrl, SystemAccount.UserToken)

...