首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用LdapConnetion.Disconnect时的PlatformNotSupportedException

调用LdapConnetion.Disconnect时的PlatformNotSupportedException
EN

Stack Overflow用户
提问于 2018-01-10 12:46:27
回答 2查看 1.2K关注 0票数 1

一切似乎都运行得很好(除了检索特定属性应该比遍历所有现有属性要容易得多--不确定为什么它是这样设计的),但是当我尝试断开连接时,我得到了以下结果:

PlatformNotSupportedException:此平台不支持线程中止。

代码与Novell文档中的代码几乎完全相同,只是我试图检索两个特定的属性(名称和登录时间):

代码语言:javascript
复制
var users = new List();

// Creating an LdapConnection instance 
LdapConnection ldapConn= new LdapConnection();

//Connect function will create a socket connection to the server
ldapConn.Connect("DOMAIN.com",389);

//Bind function will Bind the user object Credentials to the Server
ldapConn.Bind("DOMAIN\\_Bassi","password");

// Searches in the Marketing container and return all child entries just below this
//container i.e. Single level search
LdapSearchResults lsc=ldapConn.Search("OU=Users,OU=MCS,OU=AU,OU=COMPANY,DC=DOMAIN,DC=com",
                LdapConnection.SCOPE_ONE,
                "objectClass=*",
                null,
                false);

while (lsc.hasMore())
{
    var user = new User();

    LdapEntry nextEntry = null;
    try 
    {
        nextEntry = lsc.next();
    }
    catch(LdapException e) 
    {
        Console.WriteLine("Error: " + e.LdapErrorMessage);
        // Exception is thrown, go for next entry
        continue;
    }
    Console.WriteLine("\n" + nextEntry.DN);

    LdapAttributeSet attributeSet = nextEntry.getAttributeSet();
    System.Collections.IEnumerator ienum =  attributeSet.GetEnumerator();

    var atts = attributeSet.ToArray().ToList();

    while(ienum.MoveNext())
    {
        LdapAttribute attribute=(LdapAttribute)ienum.Current;
        if(attribute.Name == "sAMAccountName")
        {
            user.UserName = attribute.StringValue;
        } 
        else if(attribute.Name == "lastLogonTimestamp")
        {
            user.LastLogon = DateTime.FromFileTime(long.Parse(attribute.StringValue));
        }
    }

    users.Add(user);
}

ldapConn.Disconnect();

一旦Disconnect被调用时,我得到了错误。

还有没有其他人经历过这种情况,或者知道可能出了什么问题?

堆栈跟踪

代码语言:javascript
复制
System.Threading.Thread.Abort()


Novell.Directory.Ldap.Connection.Dispose(bool disposing, string reason, int semaphoreId, InterThreadException notifyUser)


Novell.Directory.Ldap.Connection.destroyClone(bool apiCall)


Novell.Directory.Ldap.LdapConnection.Disconnect()


LogonChecker.Managers.ActiveDirectory.GetADUsers() in ActiveDirectory.cs
- 
64.                    }
65.                }
66.
67.                users.Add(user);
68.            }
69.
70.            ldapConn.Disconnect();
71.
72.            return users;
73.
74.            // LdapConnection ADconn = new LdapConnection();
75.            // ADconn.Connect("DOMAIN.com", 389);
76.            // ADconn.Bind("DOMAIN\\_Bassie", "password");


LogonChecker.Controllers.UserController+d__2.MoveNext() in UserController.cs
- 
20.        }
21.
22.        // GET: User
23.        public async Task Index()
24.        {
25.            var ad = new ActiveDirectory();
26.            var users = ad.GetADUsers();
27.
28.            return View(users);
29.            // return View(await _context.User.ToListAsync());
30.        }
31.
32.        // GET: User/Details/5


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


System.Runtime.CompilerServices.TaskAwaiter.GetResult()


Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+d__12.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+d__10.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)


Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)


Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+d__14.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+d__22.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)


Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)


Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+d__17.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+d__15.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


Microsoft.AspNetCore.Builder.RouterMiddleware+d__4.MoveNext()


System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)


Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+d__7.MoveNext()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-10 15:52:41

Novell开发人员已经提出了新版本Novell.Directory.Ldap.NETStandard

它似乎与DotNet Core2.0完全兼容。我已经将我的项目引用更改为Novell.Directory.Ldap.NETStandard 3.0.0版本,现在它工作得很好。

相同的命令行是:

代码语言:js
复制
Install-Package Novell.Directory.Ldap.NETStandard -Version 3.0.0-beta4
票数 1
EN

Stack Overflow用户

发布于 2018-07-26 16:40:44

它抛出此错误的原因是Thread.Abort()在.NET核心中不受支持。需要更新库以使用不同的机制(我相信CancellationToken是推荐的方法)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48180462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档