代码相当简单 --- 问题是 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 服务器执行此代码时无法捕获