Ral*_*ton 7 .net c# directoryservices roleprovider
代码非常简单---问题是groupPath字符串中有一个无效字符(确切地说是'/').
我想要做的事情(至少作为一个停止差距)是跳过DirectoryEntries我无法获得cn - 无论为什么.
但是,当我运行此代码时,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");
}
Run Code Online (Sandbox Code Playgroud)
附加观察:代码实际上是在一个自定义的RoleProvider中,好奇的是,如果我在一个简单的winforms应用程序中引用这个提供程序,并使用相同的输入调用这个相同的方法,那么catch块就会完全按照它的设想执行.我认为这表明有关.NET异常与COM异常的建议答案并不准确.虽然我无法理解为什么从WebDev服务器执行时此代码无法捕获
Noa*_*oah 13
如果未指定要捕获的内容,则默认为.NET异常.您的异常是在COM中,其中.NET未设置为捕获异常.处理这个问题的最好方法是捕获COM异常,它应该是这样的:
try
{
}
catch (System.Runtime.InteropServices.COMException COMex)
{
}
catch (System.Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)