Questões excluir um conjunto de sites
-
23-08-2019 - |
Pergunta
Atualmente estou fazendo algum teste onde eu tentar excluir um conjunto de sites de forma programática. Assim eu percebi algum comportamento estranho pelo SharePoint.
Eu usei o seguinte código para testar a eliminação coleção site.
private static void DeleteSiteCollection(string urlSiteToDelete)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://wssdev06"));
webApp.Sites.Delete(urlSiteToDelete);
webApp.Update();
});
}
Então, quando eu chamar o método com a url de um conjunto de sites existente do conjunto de sites será excluído conforme o esperado. Mas quando eu chamar o método com NULL, a string vazia ou um URL que não está ligado a um conjunto de sites, em seguida, SharePoint exclui o conjunto de sites que reside na raiz (por exemplo, http: // wssdev06 / ).
Eu não tenho certeza se eu estou muito despejar para usar este método SPSiteCollection.Delete () ou se eu não entender o conecpt de conjuntos de sites e caminhos gerenciados, mas acho que isso realmente estranho e alarmante comportamento.
Eu poderia repoduce este behavoir na aplicação web diferente, mas não tinha opção de teste num outro ambiente SharePoint ainda.
Então, estou fazendo algo errado ou isso é um bug?
UPDATE:
Então eu fiz mais algumas investigações e percebeu que este deve ter algo a ver com o indexador da classe SPSiteCollection que retorna o conjunto de sites raiz se não houver nenhum conjunto de sites localizados sob a url dada. Parece um bug.
Solução
Sempre que você perguntar SharePoint para encontrar um conjunto de sites usando uma URL que vai fazer é melhor para retornar um SPSite mesmo se isso significa que ele vai ter que ignorar parte da URL.
Às vezes, isso é uma coisa muito boa. f.i. se você tiver o URL completo de uma lista e quer encontrar o correspondente SPSite e SPWeb.
Mas pode ser muito perigoso como quando você está excluindo conjuntos de sites e talvez fazer um erro de ortografia. Se você quiser ter certeza de obter o conjunto de sites direito a pesquisa do SPSite primeiro e verificar se o SPSite você obterá tem a URL que você deseja.
BR
Por
Outras dicas
Seu código parece certo. Um pensamento seria adicionar uma verificação da coleção locais para garantir que o site que você deseja excluir está na coleção sites. Sei que isso não responder à sua pergunta.
Isso soa como exatamente a questão descrita no KB 968474 da Microsoft - stsadm pode inadvertidamente excluir um conjunto de sites raiz se o caminho URL errônea usada. Semelhante a seus sintomas, ao usar stsadm - "Se o caminho URL está incorrecta, a exclusão e restaurar é tentada contra o único caminho válido que é o conjunto de sites raiz do URL" o restaurar,
Parece-me que há algum erro no site de exclusão API subjacente, como você suspeita. Possivelmente, o algoritmo procura por uma "correspondência mais próxima" ao invés de "correspondência exata".
enumerando os Conjuntos de Sites e validar uma correspondência exata pode ser a melhor maneira de evitar isso. No entanto, eu não diria que você está fazendo nada de errado, pois isso é muito perto do código de exemplo Microsoft ea documentação para a função dá nenhum aviso sobre a passagem URLs inválidos.