首页 > 解决方案 > NTAccount.Translate 失败后出现异常“System.ObjectDisposedException:安全句柄已关闭”

问题描述

我在 asp.net 网站上遇到了这个问题,但对于 windows 计算机上的 .Net Core 来说应该是通用的。

如果我尝试翻译一个不存在的域,我会得到一个异常,这没关系,但是接下来所有具有正确域名的调用都会抛出一个异常“System.ObjectDisposedException:安全句柄已关闭”。

我在询问一些解决方法,因为名称翻译在重新启动应用程序之前不起作用。


这种行为可以重现


class Program
{
    static string Translate(string gName)
    {
        try
        {
            var nt = new NTAccount(gName);
            if (nt.IsValidTargetType(typeof(SecurityIdentifier)))
            {
                var si = (SecurityIdentifier)(nt).Translate(typeof(SecurityIdentifier));
                return si.ToString();
            }
        }
        catch (Exception ex)
        { 
            Console.Write(ex.ToString()+"\n\n");                
        }
        return "";
    }
    static void Main(string[] args)
    {
        var si= new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
        var na = si.Translate(typeof(NTAccount));
        var knownName = na.ToString();
        foreach (var aName in new[] {  knownName,
                                       @"DOMAIN_NOT_ESISTS\Benutzer",
                                       knownName  })
        {
            Console.WriteLine(aName);
            Console.WriteLine(Translate(aName));
        }
        Console.ReadKey();
    }
}

标签: windowssecurity.net-core

解决方案


推荐阅读