У меня есть веб-служба SOAP, работающая на моей коробке sharepoint в каталоге _layouts, и толстый клиент, который использует эту службу SOAP. У нас есть один блок sharepoint, который использует базовую аутентификацию, а другой - клиентские сертификаты. Мне нужен этот сервис SOAP для обновления некоторых элементов списка в библиотеке документов. Проблема в том, что у меня ничего не получается, если я не запускаю блок с повышенными привилегиями. Вот фрагмент кода того, что я пытаюсь сделать.
using (SPSite site = new SPSite(fileUrl))
using (SPWeb web = site.OpenWeb()) {
// web.CurrentUser is always null unless in elevated privileges block.
// do something with document library...
web.Files.Add(...); // fails with access denied unless in elevated privileges block.
}
Я также пытался "SPContext.Current.Web", но он возвращает ноль для "web.CurrentUser", даже если я нахожусь в блоке с повышенными привилегиями.
Я действительно не могу использовать блок с повышенными правами, потому что пользователи жалуются на то, что все, что касается моей службы SOAP, изменено системой.
Из толстого клиента мы используем код, подобный следующему ...
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestString);
if(basicAuth) {
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
}
else {
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 certificate in store.Certificates) {
request.ClientCertificates.Add(certificate);
}
request.GetResponse();
Мы вручную создаем SOAP-запрос по разным причинам.