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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top