我有一个需要基于用户名和密码的用户,除了进行验证,以检查用户是否属于该组WSMA Windows服务(运行作为本地系统用户)。 我当前的代码是这样的:
var pc = new PrincipalContext(ContextType.Machine);
using (pc)
{
try
{
if (pc.ValidateCredentials(username, password))
{
using (var groupEntry = new DirectoryEntry("WinNT://./WSMA,group"))
{
foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
{
using (var memberEntry = new DirectoryEntry(member))
{
if (memberEntry.Path.ToLower().EndsWith(username.ToLower()))
{
return new LoginResult{ success = true };
}
}
}
}
}
return new LoginResult{ success = false };
}
catch (PrincipalOperationException poe)
{
if (poe.ErrorCode == -2147023688)
{
return new LoginResult { Success = false, ErrorMessage = "Password expired" };
}
throw poe;
}
}
这所有的作品,因为它应该的,只要我连接到网络,但如果我拔掉我的网线,然后ValidateCredentials打电话给我下面的错误信息:
FileNotFoundException异常用户代码unhandeled。 找不到网络路径。
我想这已经是与广告,但我只需要检查的本地用户,并没有那么网络访问不应该要求域用户。
没有办法做到这一点使用的PrincipalContext,或将在断开连接的情况下工作,一些其他的方式?