【问题标题】:What does it imply to call a web service (SOAP over HTTP) stateless?将 Web 服务 (SOAP over HTTP) 称为无状态意味着什么?
【发布时间】:2012-05-11 15:00:00
【问题描述】:

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

堆栈溢出问题Webservices are stateless? 提到了用于维护状态的cookie 之类的技巧,但由于我没有做出任何明确的努力来维护状态,Employee 对象的状态是如何维护的?

如果我完全误解了有状态/无状态的概念,请告诉我。

【问题讨论】:

  • 阅读您引用的 SO 帖子中提供的答案。它准确地解释了“无状态”的含义。简短回顾:网络服务不知道也不关心任何之前或之后的请求。它只处理您的请求并返回您要求的内容。
  • @Styxxy 当我调用 getSalary 时我得到了 1000,我感到很困惑,我没有做出任何努力来维持状态???那是怎么回事???
  • 因为你的set请求已经被处理过了,所以get请求也会得到新的数据。 Web 服务的无状态性与应用程序中对象的状态没有太大关系,尽管它具有相同的名称。

标签: web-services http soap state stateless


【解决方案1】:

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

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

是的,http 协议本质上是一个无状态协议,但为了使其有状态,我们使用了 HTTP cookie。因此,默认情况下是 SOAP。但它也可以是有状态的,这取决于你使用的框架。

您提供的案例,您是否尝试在后续请求或相同请求中设置和获取值?只有这样,我才能对此发表评论。

【讨论】:

  • 2 webservice call 1. setSalary 2. getSalary 一个接一个。
  • 你能用这些方法分享web服务类吗?
【解决方案2】:

在 HTTP 等无状态协议中,每个请求都是独立的。在每个请求中,客户端调用服务器,服务器响应。每个请求都是独立的。客户端需要在每次请求时重新建立与服务器的关系。这并不意味着服务器会忘记以前的请求。如果客户端请求员工的薪水,服务器将响应它拥有的该员工的薪水信息。这就是getSalary 的意思。如果客户端告诉服务器员工的薪水是多少,服务器将保存该员工的薪水值。这就是setSalary 的意思。

如果您在getSalary 之前执行setSalary,您将取回您设置的值。你还期望发生什么? setSalary 方法到底有什么意义,它不会导致服务器实际保存设置的值,并在后续的getSalary 请求中返回该值?

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 2017-09-01
    • 2016-09-07
    • 2015-03-19
    • 2012-10-23
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多