コードはかなり単純です --- 問題は、groupPath 文字列に無効な文字 (正確には「/」) があることです。
私がやろうとしているのは(少なくともストップギャップとして)、cnを取得できないDirectoryEntriesをスキップすることです---理由に関係なく。
ただし、このコードを実行すると、catch ブロックが実行されず、代わりに次のメッセージが表示されます。 サーバーが動作していません。および未処理の System.Runtime.InteropServices.COMException です。
catch ブロックがこの例外をキャッチしないのはなぜですか。
try
{
using (DirectoryEntry groupBinding = new DirectoryEntry("LDAP://" + groupPath))
{
using (DirectorySearcher groupSearch = new DirectorySearcher(groupBinding))
{
using (DirectoryEntry groupEntry = groupSearch.FindOne().GetDirectoryEntry())
{
results.Add(string.Format("{0}", groupEntry.Properties["cn"].Value.ToString()));
}
}
}
}
catch
{
Logger.Error("User has bad roles");
}
追加の観察: コードは実際にはカスタム RoleProvider にあります。奇妙なことに、単純な winforms アプリでこのプロバイダーを参照し、同じ入力でこの同じメソッドを呼び出すと、catch ブロックが想定どおりに動作します。これは、.NET 例外と COM 例外に関する提案された回答が正確ではないことを示唆していると思います。WebDevサーバーから実行したときにこのコードがキャッチされない理由を理解するのに途方に暮れていますが