문제

현재 사이트 컬렉션을 프로그래밍 방식으로 삭제하려는 테스트를하고 있습니다. 따라서 나는 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가 루트 아래에있는 사이트 컬렉션을 삭제합니다 (예 : http : // wssdev06/).

이 spsitecollection.delete () 메소드를 사용하기에는 너무 덤프인지 또는 사이트 컬렉션과 관리 경로의 Conecpt를 이해하지 못했는지 확실하지 않지만, 이것이 정말 이상하고 놀라운 행동이라고 생각합니다.

다른 웹 애플리케이션 에서이 동작을 소개 할 수 있었지만 아직 다른 SharePoint 환경에서 테스트 할 수있는 옵션이 없었습니다.

그래서 내가 뭔가 잘못하고 있습니까? 아니면 버그입니까?

업데이트:

그래서 나는 더 많은 조사를 수행했으며, 이것은 주어진 URL 아래에 사이트 컬렉션이없는 경우 루트 사이트 컬렉션을 반환하는 spsitecollection 클래스의 인덱서와 관련이 있어야한다는 것을 깨달았습니다. 버그처럼 보입니다.

도움이 되었습니까?

해결책

URL을 사용하여 SharePoint에 사이트 컬렉션을 찾도록 요청할 때마다 URL의 일부를 무시해야하더라도 SPSITE를 반환하는 것이 가장 좋습니다.

때때로 이것은 아주 좋은 것입니다. FI 목록의 전체 URL이 있고 해당 SPSITE 및 SPWEB를 찾으려면 FI.

그러나 사이트 컬렉션을 삭제하고 철자 실수를 할 때처럼 매우 위험 할 수 있습니다. 올바른 사이트 컬렉션을 얻으려면 먼저 SPSITE를 조회하고 원하는 SPSITE에 원하는 URL이 있는지 확인하십시오.

Br

다른 팁

코드가 옳습니다. 한 가지 생각은 삭제하려는 사이트가 사이트 컬렉션에 있는지 확인하기 위해 사이트 컬렉션의 확인을 추가하는 것입니다. 나는 이것이 당신의 질문에 대답하지 않는다는 것을 알고 있습니다.

이것은 Microsoft의 KB 968474에 설명 된 문제처럼 들립니다. -StSADM은 잘못된 URL 경로를 사용하면 우연히 루트 사이트 수집을 삭제할 수 있습니다. 증상과 마찬가지로 STSADM -O 복원을 사용할 때 "URL 경로가 잘못된 경우 삭제 및 복원은 URL의 루트 사이트 모음 인 유일한 유효한 경로에 대해 시도됩니다."

당신이 의심했듯이 기본 사이트 삭제 API에 약간의 버그가있는 것처럼 들립니다. 아마도 알고리즘은 "정확한 일치"보다는 "가장 가까운 일치"를 찾습니다.

사이트 컬렉션을 열거하고 정확한 일치를 확인하는 것이이를 피하는 가장 좋은 방법 일 수 있습니다. 그러나 이것이 Microsoft 샘플 코드에 매우 가깝기 때문에 잘못하고 있다고 말하지 않을 것입니다.이 기능에 대한 문서는 유효하지 않은 URL을 전달하는 것에 대한 경고를 제공하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top