По-перше, ви створили службу WCF за допомогою CKSDEV, який
створює WCF на базі сервісу SharePoint WCF (чиста, повна підтримка
SharePoint, немає необхідності в конфігураційному файлі), або
"звичайна" служба WCF, розгорнута в папці ISAPI?
Також я бачу кілька проблем:
First, To consume a WCF service running in SP,
you always need to set the impersonation level in the consuming
code:
var client = new YourServiceClient();
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Second, elevation only works if you actually
create a new context inside it,
SPSecurity.RunWithElevatedPrivileges(delegate{
using (SPSite newspSite = SPContext.Current.Site)
{
//your elevated actions (not actually elevated
}
});//the current context is disposed!!
не створює виділений об'єкт сайту, що ще гірше, він
містить фактичний поточний контекст!
SPSecurity.RunWithElevatedPrivileges(delegate{
using (SPSite newspSite = new SPSite(SPContext.Current.Site.Url))
{
//your elevated actions
}
});
Last: Anything running at the farm
level being called from a webapp will not work, seeing as even
under elevated prviliges the code will run as the web app's
apppool, which is not a farm admin (I hope :-D).
Зателефонуйте до служби під центральним адміністратором, який
запускає під пулом додатків цього сайту (обліковий запис ферми). Це
означає, що користувач, який використовує код, потребує доступу на
рівні ферми, тому, ймовірно, він не працюватиме.
У минулому я обійшов це, призначивши обліковий запис
адміністратору сайту кореневої колекції веб-застосунку. Це
обліковий запис служби (тому в AD не має жодних дозволів на вхід у
систему: вхід локально, вхід як пакет/служба тощо) Цей користувач
повинен бути членом адміністративної групи ферми. Потім
скористайтеся наступним кодом, щоб отримати цього користувача, а
потім запустити код, як цей користувач:
SPSecurity.RunWithElevatedPrivileges(delegate{
using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.Url))
{
using (SPSite newspSite = new SPSite(elevatedSite.Url, elevatedSite.SecondaryContact.UserToken))
{
//your elevated actions, running as the secondary admin
}
}
});
P.S. Служба конвертації документів виконується асинхронно, тому
після звільнення завдання, ви не знаєте, коли вона дійсно
виконується, так що ви не можете, наприклад, завантажити отриманий
документ відразу після.