Код довольно прост - проблема в том, что в строке groupPath есть недопустимый символ (точнее, '/').
То, что я пытаюсь сделать (по крайней мере, в качестве пробела), - это пропустить каталог DirectoryEntries, для которого я не могу получить cn - независимо от того, почему.
Однако, когда я запускаю этот код, блок catch не запускается, а вместо этого я получаю:
Сервер не работает. и необработанное исключение System.Runtime.InteropServices.COME.
Почему блок 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