Проблема с прерванием потока с SharePoint spweb.properties.update ()

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/13963

Вопрос

У меня есть пользовательский веб -сервис, который работает в SharePoint 2007, а также SharePoint 2010. В настоящее время я тестирую только в SharePoint 2010 в своей среде Dev. У меня есть код, который делает следующее:

bool allowUnsafeUpdates = web.AllowUnsafeUpdates;
try
{
    web.Properties[webPropertyBagKey] = value;
    web.AllowUnsafeUpdates = true;
    try
    {
        web.Properties.Update();
    }
    catch (Exception ex)
    {
        // Update failed likely due to security reasons, try with elevated privileges
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite elevatedSite = new SPSite(web.Site.ID))
            {
                using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))
                {
                    bool elevatedAllowUnsafeUpdates = elevatedWeb.AllowUnsafeUpdates;
                    try
                    {
                        elevatedWeb.Properties[webPropertyBagKey] = value;
                        elevatedWeb.AllowUnsafeUpdates = true;
                        elevatedWeb.Properties.Update();
                    }
                    finally
                    {
                        elevatedWeb.AllowUnsafeUpdates = elevatedAllowUnsafeUpdates;
                    }
                }
            }
        });
    }
}
catch (Exception ex)
{
    // log exception, but don't bubble it up...
}
finally
{
    web.AllowUnsafeUpdates = allowUnsafeUpdates;
}

Прежде чем я доберусь до приведенного выше кода, объект SPWEB (WEB) был открыт с использованием техники, чтобы выдать себя за владельца сайта путем определения токена пользователя владельца сайта и создания осмысления объекта SPSITE путем предоставления токена пользователя и получения SPWEB оттуда. Таким образом, вызовы SharePoint API уже имеют достаточно повышенные привилегии.

Я обнаружил, что мой первый web.properties.update (), кажется, работает нормально, если я аутентифицирую веб -службу с помощью владельца сайта. Однако, если я аутентифицирую в веб -службу, используя пользователя, который просто имеет доступ к Интернету, мой Web.properties.update () вызов вызов. Я надеялся, что не так уж плохо, потому что я могу просто бежать с повышенными привилегиями (которые выполняют ревертозель и бегают в качестве владельца пула приложений). Этот код работает должным образом, но вскоре после выполнения кода поток прерывает при обработке некоторых других инструкций (например, «{» после другого блока попыток в каком -то другом коде.

Хорошая новость заключается в том, что если я просто запускаю withelevatedprivileges, то я, кажется, все в порядке. В основном поймать первоначальную попытку оставляет затяжную проблему, хотя я ничего не пузыри.

Есть идеи, что здесь происходит? Я обеспокоен тем, что есть и другие места, где я мог бы столкнуться с этим, помимо того, что просто спасти Spweb.properties.

Это было полезно?

Решение

Возможно, вы захотите попытаться отключить встроенное внедрение SharePoint в обработке доступа к исключениям, которые по умолчанию, похоже, отменяют текущий запрос и часто вызывает ThinkAbortExceptions.

Spsecurity.catchaccessdeniedexception

Установка этого свойства в False должно позволить вам самостоятельно обрабатывать на исключение. Не забудьте восстановить его значение, как только вы закончите.

Другие советы

Я столкнулся с подобной ситуацией - по крайней мере, я думаю, что это может быть. Способ решить, чтобы понять, что я на самом деле делаю, например, призываюusing (SPSite elevatedSite = new SPSite(web.Site.ID))изнутри делегата в RunWitelevatedPrivileges.

Дело в том, что, кажется, делегат работает в другом потоке. Таким образом, вместо использования web.site.id (который находится в другом потоке), вам необходимо хранить все данные, которые вам нужны (все идентификаторы и т. Д.) В простых переменных перед входом в делегат. Это должно позаботиться о теме нити.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top