我有一个HTTP是无状态的概念,因此SOAP over HTTP(用于Web服务)也是无状态的。我曾经认为 state 意味着“对象的状态”。例如,假设我有一个名为Employee
的类和名为setSalary
和getSalary
的方法。如果Web服务的调用者调用setSalary
并使薪水为1000,那么如果调用getSalary
,则调用者不一定得到值10000.当我测试getsalary
并获得1000时(即setSalary
分配的值),我想知道如何维护Employee
对象的状态。
Stack Overflow问题Webservices are stateless?提到了像用于维护状态的cookie这样的技巧,但由于我没有做出任何明确的维护状态的努力,Employee
对象的状态是如何保持的?
如果我完全误解了州/无国籍的概念,请告诉我。
答案 0 :(得分:9)
无状态表示服务状态不会在后续请求和响应之间保持不变。 然而,在有状态中,状态在后续请求之间保持不变,即每个请求都需要知道并保留先前请求中所做的更改。
银行应用程序是有状态应用程序的一个示例,用户首先登录然后进行事务并注销。如果用户在注销后尝试进行交易,他将无法这样做。
是的, http协议本质上是一种无状态协议,但要使其成为有状态,我们会使用 HTTP Cookie 。所以,默认情况下是SOAP。但它同样可以是有状态的,取决于你正在使用的框架。
您提供的案例,您是否尝试在后续请求或相同请求中设置和获取值?那么,我可以评论一下。
答案 1 :(得分:3)
在无状态协议(如HTTP)中,每个请求都是独立的。在每个请求中,客户端调用服务器,服务器响应。每个请求都是独立的。客户端需要在每个请求上重新建立与服务器的关系。这并不意味着服务器会忘记以前的请求。如果客户端请求员工的工资,服务器将使用它为该员工提供的工资信息进行响应。这就是getSalary
的含义。如果客户端告诉服务器员工的工资是多少,服务器将保存该员工的工资值。这就是setSalary
的含义。
如果您在setSalary
之前执行getSalary
,则会获得您设置的值。您还期望发生什么?究竟什么是setSalary
方法,它不会导致服务器实际保存值集,并在后续getSalary
个请求中返回该值?< / p>