2012-04-16 51 views
0

我想要一個雙工服務,我想知道客戶端是否正確輸入了她的用戶名和密碼,因爲如果用戶以前正確地發送了她的用戶名和密碼,我只想讓它使用服務的方法。WCF:此場景中每次會話的每次呼叫會更好?

對於雙工,對於這個post,我知道我可以使用每個呼叫的雙工服務,使用靜態列表來存儲呼叫之間的回調。但我懷疑如何使用per call方法進行用戶控制。

我想在這種情況下:

1.-用戶調用方法登錄(),併發送用戶名和密碼。在這種情況下是正確的。

2.-用戶現在可以調用服務的其餘方法。例如method1()。在這裏我有一個問題。每次調用它如何在每個方法調用中創建一個新實例,但是,從同一個客戶端開始,每個回調都有不同的代碼或者是相同的?如果相同,當客戶端有不同的回調時,它何時重新啓動應用程序?

如果每個呼叫的回叫不同,我怎麼知道客戶端以前是否發送過她的用戶名和密碼?我需要發送日誌和密碼作爲方法參數?

如果回調是相同的,是否有可能知道客戶端何時關閉連接以從我的靜態列表中刪除回調?也許這將是連接控制?

謝謝。

編輯:我已經做了一些探測,我發現客戶端的回調,每次調用方法都是一樣的,所以可以創建一個類來保存所需的信息,比如用戶名,如果此用戶已在此回調中輸入登錄名和密碼...等。

回答

0

如果您使用PerCall,仍然可以有SessionMode = SessionMode.Required。然後,您可以簡單地使用IsInitiating = true修飾您的登錄方法操作合同屬性,以告知wcf操作開始會話。所有其他操作應設置爲IsInitiating = false。如果客戶端在調用登錄之前調用不啓動會話的方法,則會拋出異常。

[ServiceContract(Namespace = "Services", SessionMode = SessionMode.Required, CallbackContract =   typeof(SVIMyCallback))] 

[OperationContract(Name = "login", IsInitiating = true)] 
[OperationContract(Name = "doSomething", IsInitiating = false)]