GroupPrincipal.getMembers() 的 UnsafeNativeMethods 异常
UnsafeNativeMethods exception with GroupPrincipal.getMembers()
我最近开始将我们的 .Net 4.6 Web 应用程序移植到 .Net Core 2.0,但在访问 System.DirectoryServices.AccountManagement
时遇到了一些问题
我想访问 GroupPrincipal.getMembers()
但一直收到 UnsafeNativeMethods
异常:
System.DirectoryServices.Interop.UnsafeNativeMethods+IAds.GetInfoEx(object vProperties, int lnReserved)
System.DirectoryServices.DirectoryEntry.RefreshCache(String[] propertyNames)
System.DirectoryServices.AccountManagement.RangeRetriever.GetNextChunk()
System.DirectoryServices.AccountManagement.RangeRetriever.MoveNext()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.GetNextEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNextMemberEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNext()
System.DirectoryServices.AccountManagement.FindResultEnumerator.MoveNext()
AspNetCore._Views_Groups_Show_cshtml+<ExecuteAsync>d__0.MoveNext() in Show.cshtml
+
@foreach (var p in Model.GetMembers())
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Show.cshtml中的代码:
@using System.DirectoryServices.AccountManagement
@model GroupPrincipal
@foreach (var p in Model.GetMembers())
{
...
}
异常:
System.Exception: An operations error occurred.
已经尝试将代码从视图移到控制器中并用 unsafe
标记,但这也无济于事。
代码已经 运行 作为域管理员,可以访问所有用户等。只是方法调用不起作用。
正确的处理方法是什么?
好的,我好像找到了 solution/workaround:
我看到它处理了委托人,处理完就抛出异常。
所以我只是将主体放在另一个列表中并捕获了异常。
新列表包含所有主体,可以毫无问题地访问。
List<Principal> members = new List<Principal>();
try
{
members.AddRange(group.GetMembers());
}
catch (Exception)
{
; // do nothing
}
一定是 System.DirectoryServices.AccountManagement
的 .NET 核心实现中的错误
我最近开始将我们的 .Net 4.6 Web 应用程序移植到 .Net Core 2.0,但在访问 System.DirectoryServices.AccountManagement
我想访问 GroupPrincipal.getMembers()
但一直收到 UnsafeNativeMethods
异常:
System.DirectoryServices.Interop.UnsafeNativeMethods+IAds.GetInfoEx(object vProperties, int lnReserved)
System.DirectoryServices.DirectoryEntry.RefreshCache(String[] propertyNames)
System.DirectoryServices.AccountManagement.RangeRetriever.GetNextChunk()
System.DirectoryServices.AccountManagement.RangeRetriever.MoveNext()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.GetNextEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNextMemberEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNext()
System.DirectoryServices.AccountManagement.FindResultEnumerator.MoveNext()
AspNetCore._Views_Groups_Show_cshtml+<ExecuteAsync>d__0.MoveNext() in Show.cshtml
+
@foreach (var p in Model.GetMembers())
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Show.cshtml中的代码:
@using System.DirectoryServices.AccountManagement
@model GroupPrincipal
@foreach (var p in Model.GetMembers())
{
...
}
异常:
System.Exception: An operations error occurred.
已经尝试将代码从视图移到控制器中并用 unsafe
标记,但这也无济于事。
代码已经 运行 作为域管理员,可以访问所有用户等。只是方法调用不起作用。
正确的处理方法是什么?
好的,我好像找到了 solution/workaround:
我看到它处理了委托人,处理完就抛出异常。 所以我只是将主体放在另一个列表中并捕获了异常。
新列表包含所有主体,可以毫无问题地访问。
List<Principal> members = new List<Principal>();
try
{
members.AddRange(group.GetMembers());
}
catch (Exception)
{
; // do nothing
}
一定是 System.DirectoryServices.AccountManagement