gpt4 book ai didi

c# - 为什么这个 catch all block 实际上并没有 catch all

转载 作者:太空狗 更新时间:2023-10-29 19:53:31 28 4
gpt4 key购买 nike

代码相当简单——问题是 groupPath 字符串中有一个无效字符(准确地说是“/”)。

我正在尝试做的(至少作为权宜之计)是跳过我无法获得 cn 的 DirectoryEntries --- 不管为什么。

然而,当我运行这段代码时,catch block 没有运行,而是得到:服务器无法运行。和未处理的 System.Runtime.InteropServices.COMException。

为什么 catch block 不捕获这个异常。

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 block 会完全按照它应该做的去做。我认为这表明关于 .NET 异常与 COM 异常的建议答案并不准确。虽然我不明白为什么这段代码在从 WebDev 服务器执行时不会被捕获

最佳答案

当您不指定要捕获的内容时,它默认为 .NET 异常。您的异常在 COM 中,其中 .NET 未设置为捕获异常。处理这个问题的最好方法是捕获 COM 异常,它应该看起来像这样:

    try
{

}
catch (System.Runtime.InteropServices.COMException COMex)
{

}
catch (System.Exception ex)
{

}

关于c# - 为什么这个 catch all block 实际上并没有 catch all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898726/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com