2

現在、サイト コレクションをプログラムで削除しようとするテストを行っています。これにより、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() メソッドを使用するにはあまりにも愚かなのか、それともサイト コレクションと管理パスの概念を理解していなかったのかはわかりませんが、これは非常に奇妙で憂慮すべき動作だと思います。

この動作を別の Web アプリケーションで再現することはできましたが、別の SharePoint 環境でテストするオプションはまだありませんでした。

それで、私は何か間違ったことをしていますか、それともこれはバグですか?

アップデート:

そのため、さらに調査を行ったところ、指定された URL の下にサイト コレクションがない場合にルート サイト コレクションを返す SPSiteCollection クラスのインデクサーと関係があるはずであることがわかりました。バグのように見えます。

4

3 に答える 3

1

あなたのコードは正しく見えます。サイト コレクションのチェックを追加して、削除するサイトがサイト コレクションに含まれていることを確認することも考えられます。これはあなたの質問に答えていないことを理解しています。

于 2009-05-20T15:12:54.623 に答える
1

URL を使用して SharePoint にサイト コレクションを検索するように要求するときはいつでも、たとえ URL の一部を無視しなければならないことを意味していても、SPSite を返すのが最善です。

時々これはとても良いことです。リストの完全な URL を持っていて、対応する SPSite と SPWeb を見つけたい場合は、fi.

ただし、サイト コレクションを削除する場合や、スペルを間違える場合など、非常に危険な場合があります。適切なサイト コレクションを確実に取得するには、まず SPSite を検索し、取得した SPSite に必要な URL があることを確認します。

ブラジル

あたり

于 2009-05-23T18:52:54.440 に答える
1

これは、Microsoft の KB 968474 で説明されている問題とまったく同じように思えます。誤った URL パスが使用された場合、stsadm は誤ってルート サイト コレクションを削除する可能性があります。症状と同様に、stsadm -o restore を使用すると、「URL パスが正しくない場合、URL のルート サイト コレクションである唯一の有効なパスに対して削除と復元が試行されます。」

ご想像のとおり、基になるサイト削除 API にバグがあるように思えます。おそらく、アルゴリズムは「完全一致」ではなく「最も近い一致」を探します。

これを回避するには、サイト コレクションを列挙して完全に一致するかどうかを検証するのが最善の方法かもしれません。ただし、これは Microsoft のサンプル コードに非常に近いものであり、関数のドキュメントでは無効な URL を渡すことについて警告が表示されないため、何か間違ったことをしているとは言えません。

于 2009-05-25T01:52:43.173 に答える