调用Web服务(SOAP over HTTP)无状态意味着什么?

时间:2012-05-02 06:17:27

标签: web-services http soap state stateless

我有一个HTTP是无状态的概念,因此SOAP over HTTP(用于Web服务)也是无状态的。我曾经认为 state 意味着“对象的状态”。例如,假设我有一个名为Employee的类和名为setSalarygetSalary的方法。如果Web服务的调用者调用setSalary并使薪水为1000,那么如果调用getSalary,则调用者不一定得到值10000.当我测试getsalary并获得1000时(即setSalary分配的值),我想知道如何维护Employee对象的状态。

Stack Overflow问题Webservices are stateless?提到了像用于维护状态的cookie这样的技巧,但由于我没有做出任何明确的维护状态的努力,Employee对象的状态是如何保持的?

如果我完全误解了州/无国籍的概念,请告诉我。

2 个答案:

答案 0 :(得分:9)

无状态表示服务状态不会在后续请求和响应之间保持不变。 然而,在有状态中,状态在后续请求之间保持不变,即每个请求都需要知道并保留先前请求中所做的更改。

银行应用程序是有状态应用程序的一个示例,用户首先登录然后进行事务并注销。如果用户在注销后尝试进行交易,他将无法这样做。

是的, http协议本质上是一种无状态协议,但要使其成为有状态,我们会使用 HTTP Cookie 。所以,默认情况下是SOAP。但它同样可以是有状态的,取决于你正在使用的框架。

您提供的案例,您是否尝试在后续请求或相同请求中设置和获取值?那么,我可以评论一下。

答案 1 :(得分:3)

在无状态协议(如HTTP)中,每个请求都是独立的。在每个请求中,客户端调用服务器,服务器响应。每个请求都是独立的。客户端需要在每个请求上重新建立与服务器的关系。这并不意味着服务器会忘记以前的请求。如果客户端请求员工的工资,服务器将使用它为该员工提供的工资信息进行响应。这就是getSalary 的含义。如果客户端告诉服务器员工的工资是多少,服务器将保存该员工的工资值。这就是setSalary的含义。

如果您在setSalary之前执行getSalary,则会获得您设置的值。您还期望发生什么?究竟什么是setSalary方法,它不会导致服务器实际保存值集,并在后续getSalary个请求中返回该值?< / p>