2010-04-06 167 views
12

想象一個更復雜的CRUD應用程序,它具有三層架構並通過Web服務進行通信。客戶端開始與服務器的對話並執行一些嚮導。爲了處理嚮導,客戶需要服務器給出的反饋。有狀態與無狀態Web服務


我們開始討論這種方法的有狀態或無狀態Web服務。我做了一些研究,結合我自己的經驗,後面提到了這個問題。具有下列特性(在我們的例子)

無國籍的WebServices:

+ high scalability 
+ high availability 
+ high speed 
+ rapid testing 
- bloated contract 
- implementing more logic on server-side 

但是,我們可以劃掉第一個兩分,我們的應用程序並不需要高可擴展性和可用性。

所以我們來到有狀態的web服務。我讀了一堆博客和論壇帖子和執行有狀態web服務最發明的一點是:

+ simplifies contract (protocol) 
- bad testing 
- runs counter to the basic architecture of http 

但並不幾乎所有的網絡應用程序有這些壞點? Web應用程序使用cookie,查詢字符串,會話ID以及所有內容來避免http的無狀態。

那麼爲什麼它對web服務不好呢?

+1

非常接近愚蠢:http://stackoverflow.com/questions/988819/stateful-webservice – gregmac 2010-04-06 21:16:35

+3

把狀態置於一個可以輕鬆處理狀態的地方:數據庫 – 2010-04-06 21:18:18

回答

9

因爲在web服務中保持狀態是困難的,如果你不是非常小心和/或經驗遲早你可能會遇到一些很難找到的錯誤。

+0

那麼,這取決於平臺是什麼。集裝箱很多時候會照顧你的會議。 – 2010-04-06 21:18:54

+1

爲什麼不簡單使用專爲此目的設計的容器,如RDMS。 – 2010-04-06 21:22:45

+0

我不確定我是否理解。如果你把東西放到RDMS中,它基本上意味着你自己的會話可能會變得更糟。聽起來他並不需要會話中的持續信息,所以爲什麼要放在那裏呢? – 2010-04-06 21:34:55

1

我已經有狀態的web服務合理的運氣。他們確實感覺有些骯髒,因爲HTTP上的孔cookie會話是這樣的;但另一方面,他們是肥皂,所以在那個時候對美容過於沮喪會很愚蠢。

需要記住的一件事是互操作性:如果您正在進行有狀態的Web服務,您的客戶將不得不支持相同的狀態(通常是Cookie)。但是再次 - 爲我工作得很好。

P.S.我假設你在一個容器中,負責跟蹤你的會話。

2

狀態也是大多數錯誤隱藏的地方。