【发布时间】:2009-05-22 16:22:09
【问题描述】:
代码相当简单 --- 问题是 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 服务器执行时无法捕获
【问题讨论】:
-
在调试器中,还是在构建中?
-
您在哪一行得到异常?什么线程?
-
另外,你能添加例外吗? (Exception.ToString())
-
我想知道是否可能在包含 Using 语句产生的 Dispose 的隐式 finally 块之一中引发了异常?在 finally 块中没有一些奇怪的异常处理规则吗?无论如何,如果发生这种情况,我会拉出 Using 语句并对其进行长期编码,以便更好地处理异常发生的确切位置。
-
你不是在发布模式下调试,是吗?否则可能会发生这种奇怪的事情。
标签: c# .net directoryservices roleprovider