У меня есть эта проблема на веб-сайте asp.net, но она должна быть общей для .Net Core на компьютере с Windows.
Если я попытаюсь перевести несуществующий домен, я получу исключение, все нормально, но затем все последующие вызовы с правильным именем домена выдают исключение «System.ObjectDisposedException: безопасный дескриптор закрыт»,
Я спрашиваю о некотором обходном пути, потому что перевод имени не работает до перезапуска приложения.
Это поведение можно воспроизвести с помощью
- Microsoft.NETCore.App 2.2.0
- System.Security.Principal.Windows 4.5.1
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();
}
}