2013-03-20 93 views
1

我這樣當前登錄用戶名和密碼:註銷從服務

var client = new ServiceReference.CalcServiceClient(); 
client.ClientCredentials.UserName.UserName = "test"; 
client.ClientCredentials.UserName.Password = "test"; 
client.DoWork(); 

這工作得很好。現在,我想添加一種註銷方式(用戶按下按鈕,註銷請求應該以某種方式發送)。

這是可能的,如果是這樣,那麼實現這個的最好方法是什麼?

+0

請提供更多詳細信息 - CalcServiceClient是代理服務器嗎?那麼關閉它可能會足夠好嗎? – evgenyl 2013-03-20 08:04:59

+1

由於WCF是無狀態的(或至少應該是)沒有會話的概念。憑證保存在代理實例中,每個請求分別進行驗證。如果這種特定服務有不同的行爲,告訴我們它是什麼,也許我們可以提供幫助。 – 2013-03-20 08:12:17

回答

5

如果WCF配置了PerSession,client.Close();將完成這項工作。

的過程將是:

  • 客戶端創建WCF服務的代理,使方法 調用。
  • 創建一個WCF服務實例,它爲方法響應提供服務。
  • 客戶端在同一個會話中調用另一個方法。
  • 相同的WCF服務實例提供方法調用。
  • 當客戶端完成其活動時,WCF實例被銷燬 並送往垃圾收集器進行清理。

隨着關閉你會觸發垃圾收集器清理。

如果WCF配置了PerCall,則不需要擔心Close/Logof。我會建議總是執行一個明確的關閉(和使用),但在這種情況下並不是必須的。

如果WCF配置了SingleInstance ...那麼也許你做錯了:)無論如何,你應該繼續使用Close()。