2011-03-10 220 views
1

我有兩個wcf服務,使用http綁定在IIS中承載相同的接口。兩者只有三種方法:Web服務狀態

  1. OpenFile(userid)其中創建或打開userid.txt。

  2. Write(userid, X)其中寫入X置於

  3. Close(userid)其關閉該文件

InstanceContextMode =InstanceContextMode.PerSession用於服務B.

服務A的文件:

  • 是它是無狀態的(服務在技術上不需要記住用戶標識,它由客戶端跟蹤)或者有狀態的(服務操作就像一個狀態機。客戶必須以特定的順序調用這些方法)?

  • 如果使用HTTPS綁定,它是有狀態的嗎?

服務B:

  • 它是無狀態的,有狀態(因爲IIS會話使用)?

我想一個更一般的問題是,Web服務的有狀態是否取決於它的設計和實現方式,或者它是如何託管的?有沒有像我可以通過的「清單」來確定我的Web服務是否被歸類爲無狀態或有狀態?

謝謝

回答

2

默認情況下,HTTP上的任何內容都是無狀態的。當您使用PerSession時,它仍然取決於您的Web服務實現是否使用Sessions。但無論如何,您的Web服務器都保持無狀態,這正是您在特殊對象(緩存,文件,數據庫或會話)中保留狀態時的狀態。

即使會話是無狀態的:除非服務器在HTTP請求中發送cookie,否則請求之間不會記住任何內容。

對於HTTPS,這不會更改。雖然它是完全不同的協議,但狀態並沒有改變。

關於您的清單:它會很短,因爲它始終是HTTP的無狀態。實現是否保持狀態不會改變這一點。如何解決這個限制和維護狀態取決於實施,你不能在外面「看到」。