1 つのログインを使用すると機能する WCF サービスがありますが、他のログインでログインしようとすると次のエラーがスローされます。奇妙なことに、パスワードを有効なログインに変更すると、新しいパスワードは機能しませんが、古いパスワードは引き続き機能します。何かをキャッシュしているようなものです。
私が得るエラーはこれです:
複数のユーザー名を使用して、同じユーザーがサーバーまたは共有リソースに複数接続することは許可されていません。サーバーまたは共有リソースへの以前の接続をすべて切断し、再試行してください
エラーの原因となるコードは次のとおりです。
public UserModel Login(string username, string password)
{
if (username == null || password == null)
return null;
using (var pContext = new PrincipalContext(ContextType.Machine))
{
if (pContext.ValidateCredentials(username, password))
{
using (var context = new MyEntities())
{
// I can tell from a SQL trace that this piece never gets hit
var user = (from u in context.Users
where u.LoginName.ToUpper() == username.ToUpper()
&& u.IsActive == true
select u).FirstOrDefault();
if (user == null)
return null;
var userModel = Mapper.Map<User, UserModel>(user);
userModel.Token = Guid.NewGuid();
userModel.LastActivity = DateTime.Now;
authenticatedUsers.Add(userModel);
sessionTimer.Start();
return userModel;
}
}
}
return null;
}
ここに関連する質問が表示されます。これは、問題が にあることを示唆していますPrincipalContext
が、回答はありません
アップデート
うまくいきました.....次の1時間以内に重要な人のためにこれを機能させる必要があったため、本番サーバーを再起動しました.再起動して、今のところ機能させるために必要なログインでログインします。再起動後、すべてが完全に機能します。私は昨日のほとんどを遅くまで過ごし、今朝はずっとこれを理解しようとしていました。Webサーバーを再起動することは想定されていませんが、これを機能させることが重要だったので、とにかく再起動しました.今ではすべてが正常に機能しています.
それでも、その問題が何であったかを知りたいです。私の最善の推測は、何かが原因で がPrincipalContext
正しく破棄されなかったため、他の資格情報セットでログインできなくなったということです。