2009-12-11 53 views
1

如果管理員登錄到我的服務,他可能希望斷開符合(或不符合)某些要求的會話,無論是自動還是手動。隨着所有資源的發佈,拋出異常看起來就像一個簡單而有效的解決方案。一個WCF會話可能在另一個會話中拋出異常嗎?

我可以使用一個本地的布爾字段,如果這是真的,他會在下次他調用任何方法時斷開這個用戶,但這看起來不是一個優雅的解決方案。

並且,它不必拋出異常,因爲我已經注意到您可以使用OperationContext.Current.Channel.Close()或中止來禁用對該會話的訪問。

有沒有一個「標準」的方式在wcf中做到這一點?

+0

要考慮的一件事是即使他們結束會話阻止他們立即啓動新的Web請求? – 2009-12-11 13:15:18

+0

好吧,在退出之前,你可能會得到一個警告,或者你可能會暫時禁止你的用戶名,等等...... – avance70 2009-12-11 13:22:15

回答

1

從給定的「會話」中,我認爲不存在對另一個會話(即實例上下文)進行任何操作的開箱即用方式。

然而,您可以通過將IChannelInitializer接口與服務或合同行爲一起使用來跟蹤連接到您的服務的客戶端。這將使您可以訪問每個客戶的相關頻道,然後您可以關閉該頻道,但這不一定會在客戶端產生非常豐富的錯誤,因爲它看起來像是一個溝通問題。

另一種方法是查看回調,如果您有權控制正在訪問該服務的客戶端。通過將上述客戶端跟蹤與回調結合使用,您實際上可以使客戶端更加優雅地關閉自己的通道,並可能向用戶通知發生了什麼事情。

+0

是的,忘了那個,謝謝:D - 多解釋一下解決方案,我剛剛添加:SessionMode = SessionMode.Required在服務上,並且[OperationContract(IsTerminating = true)]在回調斷開方法上。 – avance70 2009-12-11 13:53:52

相關問題