Задача конструктора SPSite "Операция прервана" - PullRequest
0 голосов
/ 11 августа 2009

Предупреждение. Я являюсь разработчиком asp.net и делаю первые шаги в SharePoint.

Итак, я пишу консольное приложение, которое подключается к сайту SharePoint Server 2007 на той же машине, но кажется, что что-то идет не так во время вызова конструктора SPSite (). Вот упрощенный код:

using (SPSite siteCollection = new SPSite("http://server/AwesomeSite"))
{

  //when i set a breakpoint on this line and inspect the siteCollection object, 
  //most of it's properties (for example siteCollection.AllWebs.Names) throw an 
  //exception, which leads me to the conclusion that something went wrong during 
  //the constructor above.

  SPWebCollection site = siteCollection.AllWebs;
  SPWeb web = site[""];
  SPList list = web.Lists["AwesomeList"]; //exception occurs here
}

Текст SPException:

Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))

Я последовал совету Sharepoint SPSite и проверил, что:

  1. Пользователь является администратором фермы серверов.
  2. Пользователь имеет разрешения на чтение и запись в базе данных контента.
  3. Пользователь является администратором семейства сайтов.
  4. У пользователя есть разрешения на доступ к сайту Windows SharePoint Services или сайту SharePoint Server 2007, через который проходит код.

И все они верны. Что еще может быть причиной этого?

Ответы [ 5 ]

4 голосов
/ 17 августа 2009

По моему опыту, конструктор SPSite () сильно зависит от конфигурации Alternate Access Mappings вашего сайта. Убедитесь, что URL-адрес, который вы используете в конструкторе, отображается в списке сопоставлений (например, http против https, машина против FQDN).

2 голосов
/ 17 августа 2009

Вам нужно получить больше отладочной информации.

Использование Visual Studio

Попробуйте настроить отладчик на все исключения. Перейдите к Отладка , Исключения и отметьте Общеязыковые исключения времени выполнения . Затем перейдите к Инструменты , Параметры , Отладка и снимите отметку Включить только мой код . Наконец прикрепите к w3wp.exe. Попробуйте запустить консольное приложение сейчас, и вы должны обнаружить, что оно вызывает исключение в w3wp.exe. Проверьте трассировку стека и посмотрите, даст ли это вам больше информации.

Использование файлов дампа

Вы также можете попробовать работать из аварийного дампа. Это, по общему признанию, значительно более сложный, но должен дать вам детали, которые вам не хватает в противном случае. Инструмент ProcDump может быть присоединен к w3wp.exe (при условии, что ключ -s не используется) и создаст дамп в случае возникновения необработанного исключения. Если у вас возникли проблемы с ProcDump, попробуйте ADPlus , что делает нечто подобное.

Из созданного файла дампа используйте эту статью базы знаний , чтобы настроить WinDbg и начать работу. Есть пример использования WinDbg в блоге Тесс Феррандез (Стратегия № 2) .

1 голос
/ 21 августа 2009

К сожалению, есть сотни способов вызвать эту ошибку. Просто спросите Google .

Вы можете использовать SPTraceView , чтобы получить более подробное описание ошибки. Вот описание инструмента и пример работы с ним.

Удачи!

1 голос
/ 11 августа 2009

Вы пытались запустить код с повышенными привилегиями?

Есть ли у II какие-то прикольные настройки в отношении аутентификации? (Попробуйте только аутентификацию Windows)

0 голосов
/ 18 августа 2009

У меня похожая (не равная) проблема. Я решил это с помощью этого кода:

using( SPSite site = ConnectToSharepointAsSystem() ) {
   // now should be all ok
}

// somewhere in helper class ->
public static SPUserToken GetSystemToken(SPSite site) {
    SPUserToken token = null;
    bool tempCADE = site.CatchAccessDeniedException;
    try {
        site.CatchAccessDeniedException = false;
        token = site.SystemAccount.UserToken;
    }
    catch (UnauthorizedAccessException) {
        SPSecurity.RunWithElevatedPrivileges(() => {
            using (SPSite elevSite = new SPSite(site.ID))
                token = elevSite.SystemAccount.UserToken;
        });
    }
    finally {
        site.CatchAccessDeniedException = tempCADE;
    }
    return token;
}

public static Microsoft.SharePoint.SPSite ConnectToSharepoint() {
    string urlSharepointSite;
    var ret = ConnectToSharepoint(out urlSharepointSite);
    return ret;
}
public static Microsoft.SharePoint.SPSite ConnectToSharepoint(out string urlSharepointSite) {
    urlSharepointSite = "http://www.domain.org";
    var site = new Microsoft.SharePoint.SPSite( urlSharepointSite );
    return site;
}
public static Microsoft.SharePoint.SPSite ConnectToSharepointAsSystem() {
    string urlSharepointSite;
    Microsoft.SharePoint.SPUserToken userToken = null;
    using (var tmpSite = CSharepointNastroje.PripojitNaSharepoint( out urlSharepointSite )) {
        userToken = GetSystemToken(tmpSite);
    }
    var site = new Microsoft.SharePoint.SPSite(urlSharepointSite, userToken);
    return site;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...