При попытке получить доступ к сайту 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)