2011-10-04 67 views
3

我有一個WCF服務,如果我使用一個登錄時會起作用,但如果我嘗試使用任何其他登錄進行登錄,則會引發以下錯誤。奇怪的是,如果我將密碼更改爲正在工作的登錄名,新密碼不起作用,但舊密碼仍然有效。這幾乎就像是緩存一些東西。當對PrincipalContext驗證憑證時,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; 
} 

我看到一個相關的問題here,這表明問題是與PrincipalContext,但無人接聽

更新

得到它的工作.....我重新啓動了我們的生產服務器,因爲我們需要在接下來的一個小時內爲重要的人員工作,並且我認爲,因爲之前的鏈接表明重新啓動會得到一個單一登錄名,只需重新啓動並使用所需的登錄名登錄即可,並且在重新啓動後,所有工作都完美無缺。我昨天大部分時間都呆在這裏,遲到了,今天早上所有的時間都想弄明白這一點。我們不應該重啓我們的網絡服務器,但重要的是要做到這一點,所以我反正做了,現在一切都按照它應該的方式工作。

我仍然想知道它的問題是什麼。我最好的猜測是,某些原因導致PrincipalContext無法正確處理,這阻止了我使用任何其他憑據登錄。

+0

您可以在您的配置文件(web.config/app.config)中將您的ServiceModel標籤發佈到您的生產環境中,而不是您的開發機器上嗎? – AJC

+0

@AJC已更新爲顯示ServiceModel – Rachel

+0

我不知道爲什麼不調試服務器端代碼並​​捕獲發生的任何異常。從你寫的東西看來,你唯一能夠發現異常的地方就是客戶端。 –

回答

2

重新啓動服務器解決了這個問題,但我仍然很想知道問題所在。

我最好的猜測是,某些原因導致PrincipalContext無法正確處理,這阻止了我使用任何其他憑據登錄。

+0

可能與我的另一個問題發現的解決方案有關:[爲什麼PrincipalContext.ValidateCredentials針對舊憑據進行驗證?](http://stackoverflow.com/a/11529459/302677) – Rachel