Issus удаление семейства сайтов - PullRequest
2 голосов
/ 20 мая 2009

В настоящее время я выполняю тест, в котором пытаюсь удалить семейство сайтов программным способом. Тем самым я осознал странное поведение 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.

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

UPDATE:

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

Ответы [ 3 ]

1 голос
/ 23 мая 2009

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

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

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

BR

Per

1 голос
/ 25 мая 2009

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

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

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

1 голос
/ 20 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...