Issus удаление семейства сайтов

В настоящее время я делаю некоторый тест, где я пытаюсь удалить семейство сайтов программно. Тем самым я осознал странное поведение SharePoint.

Я использовал следующий код для проверки удаления семейства сайтов.

private static void DeleteSiteCollection(string urlSiteToDelete)
{
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
       SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://wssdev06"));
       webApp.Sites.Delete(urlSiteToDelete);                    
       webApp.Update();
    });
}

Поэтому, когда я вызываю метод с URL-адресом существующего семейства сайтов, семейство сайтов удаляется, как и ожидалось. Но когда я вызываю метод со значением null, пустой строкой или URL-адресом, который не связан с семейством сайтов, тогда SharePoint удаляет семейство сайтов, которое находится под root (например, http://wssdev06/).

Я не уверен, что я слишком дамп, чтобы использовать этот метод SPSiteCollection.Delete(), или я не понимаю концепцию семейств сайтов и управляемых путей, но я думаю, что это действительно странное и тревожное поведение.

Я мог воспроизвести это поведение в другом веб-приложении, но у меня еще не было возможности протестировать в другой среде SharePoint.

Так что я делаю что-то не так или это ошибка?

ОБНОВИТЬ:

Поэтому я провел еще несколько исследований и понял, что это должно иметь отношение к индексатору класса SPSiteCollection, который возвращает корневое семейство сайтов, если под указанным URL-адресом нет семейства сайтов. Похоже, ошибка.

3 ответа

Решение

Всякий раз, когда вы просите SharePoint найти семейство сайтов с помощью URL-адреса, лучше всего будет вернуть SPS-сайт, даже если это означает, что ему придется игнорировать часть URL-адреса.

Иногда это очень хорошая вещь. Если у вас есть полный URL-адрес списка и вы хотите найти соответствующий SPSite и SPWeb.

Но это может быть очень опасно, например, когда вы удаляете семейства сайтов и, возможно, делаете орфографическую ошибку. Если вы хотите убедиться, что вы правильно выбрали семейство сайтов, сначала найдите SPSite и убедитесь, что на полученном вами SPS-сайте есть нужный URL-адрес.

BR

в

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

Это похоже на проблему, описанную в Microsoft KB 968474 - stsadm может непреднамеренно удалить корневое семейство сайтов, если используется неверный путь URL. Аналогично вашим симптомам, при использовании stsadm - o restore: "Если путь URL неверен, то попытка удаления и восстановления выполняется по единственному действительному пути, который является корневым семейством сайтов URL".

Мне кажется, что в базовом API удаления сайта есть какая-то ошибка, как вы и предполагали. Возможно, алгоритм ищет "самое близкое совпадение", а не "точное совпадение".

Перечисление Коллекций Сайта и проверка точного соответствия может быть лучшим способом избежать этого. Тем не менее, я бы не сказал, что вы делаете что-то не так, поскольку это очень близко к примеру кода Microsoft, и документация для функции не дает предупреждения о передаче недействительных URL.

Другие вопросы по тегам