2010-04-06 164 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

状态也是大多数错误隐藏的地方。