2014-01-28 42 views
0

背景爲什麼當InstanceContextMode = Per Call時WCF服務不會自動關閉會話?

我在玩WCF實例上下文模式,以瞭解它們在不同場景下的功能。我有默認的服務設置爲PerCall。默認情況下,我的意思是當你創建一個WCF服務庫時,它創建了一堆默認代碼。這是我正在使用的代碼 - 非常非常簡單的服務。我可以從簡單的客戶端調用服務。但是,如果我獨自離開客戶端並且不按任何內容約10或15分鐘,然後我嘗試撥打另一個電話,則會收到一條消息,告訴我「如果服務中止通道,安全上下文令牌將無效由於不活動。「

以下是完整的消息:

enter image description here

這是由於我處理在客戶端代理的方式。我從不關閉它。我的代理只是一個公共類級別的變量,只要沒有錯誤,我就可以重用。

因此,這裏是我的問題:

爲什麼WCF服務創建一個會話呢?我認爲,因爲實例上下文模式設置爲PerCall,它不需要會話。如果確實需要一個會話,它會在每次通話後關閉會話。即使它們來自同一個代理。

要清楚:我不是故意使用任何特定於會話的功能。我剛剛創建了一個新的WCF服務庫,並將上下文模式設置爲PerCall,並保留所有默認操作等。這就像香草服務一樣。

+0

你使用什麼綁定?您是否爲每次新呼叫重新初始化客戶端? – CodeCaster

回答

0

該消息是關於安全性,而不是服務壽命。你可以擁有一個跨許多不同生命週期類型的許多服務的安全上下文,但是如果安全上下文發生故障(例如你在一段時間內沒有更新你的令牌),你將會看到你看到的錯誤,而不管服務壽命設置。

使用PerSession生存期服務僅僅意味着您可以在該會話處於活動狀態時保持自己的特定實例處於活動狀態。這不一定與安全有關。 PerSession服務允許您更輕鬆地維護基於會話的場景的狀態。也就是說,PerSession服務存在很多縮放陷阱,只是意識到他們不一定是每種情況下的答案。

相關問題