【问题标题】:Webservices are stateless?Web服务是无状态的?
【发布时间】:2010-02-22 18:03:23
【问题描述】:

为什么我们说网络服务是无状态的?

【问题讨论】:

    标签: web-services


    【解决方案1】:

    它们不会在来自客户端的请求之间保持任何状态。即服务不知道也不关心后续请求来自已经/没有发出先前请求的客户端。基本上,它是“给我这条信息,然后忘记我”,这让客户有责任维持任何状态。

    【讨论】:

    • 我评论的那个版本短了很多,基本上说“因为他们不坚持状态”。我正在删除我的评论,还有一个赞成票。
    • @mike:我的错。我有同感。这就是我更新它的原因。
    • @brian:EWS 2010 以后的订阅流媒体怎么样?这是否会保持某种类型的状态,例如从 EWS Web 服务器到 Exchange 服务器的开放 TCP 连接?我问的原因是因为性能。同样对于一般请求,在从 EWS Web 服务器到 Exchange 服务器的会话保持开放方面,服务器是否存在开销?
    【解决方案2】:

    因为 Web 服务基于 HTTP,它是一种无状态协议。

    引用wikipedia

    无状态服务器是一种服务器 将每个请求视为独立的 与任何交易无关的交易 以前的请求。

    即每个请求都独立于前一个请求:即使我们使用一些“技巧”(例如 cookie)来保留请求之间的某些状态,这也不是协议定义的。

    【讨论】:

    • 无状态协议和无状态 Web 服务之间有很大的区别。应用程序可以是有状态的(正如您提到的,使用“技巧”),而底层协议是无状态的。此外,Web 服务不一定意味着 HTTP。例如,SOAP 可以将 SMTP 用作传输层。
    • 我不愿将 SMTP SOAP 服务称为“Web 服务”。有很多类型的服务,但对我来说,Web 服务 = HTTP 或 HTTPS。 SMTP 在网络出现之前就已经存在。所以我认为 Pascal 的相关性很好。
    【解决方案3】:

    因为 HTTP 是无状态的。服务器完成客户端请求后,不会存储任何信息以供将来的事务使用。

    【讨论】:

      【解决方案4】:

      Web 服务的概念是对 RPC(远程过程调用)又名函数进行建模。因此,您不需要使用会话。此外,无状态的想法来自于需要将 Web 服务器横向扩展到服务器场,从而实现更高的容量。

      但是,使用状态的选择取决于技术和开发人员。没有什么可以阻止您创建 ASP.Net Web 服务并在方法定义中设置“EnableSession=True”。

      这在一些基本的身份验证场景中很有用,例如本地表单身份验证或为短暂的“工作流程”提供自动关联。 (但我强烈建议您考虑更现代的技术将提供更高级别的安全性和性能)。

      【讨论】:

        【解决方案5】:

        请求是相互独立的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-05
          • 2015-09-18
          • 2011-09-11
          • 2021-10-27
          • 2010-09-10
          • 1970-01-01
          • 2018-03-02
          • 2015-06-14
          相关资源
          最近更新 更多