【问题标题】:web service statefulness网络服务状态
【发布时间】:2011-07-12 19:56:22
【问题描述】:

我有两个使用 http 绑定在 IIS 中托管的具有相同接口的 wcf 服务。两者都只有三种方法:

  1. OpenFile(userid) 创建或打开 userid.txt。

  2. Write(userid, X) 将 X 写入文件

  3. Close(userid) 关闭文件

InstanceContextMode =InstanceContextMode.PerSession 用于服务 B。

服务 A:

  • 它是无状态的(服务在技术上不需要记住用户 ID,它由客户端跟踪)还是有状态的(服务操作就像一个状态机。客户端必须以特定的顺序调用方法)?

  • 如果使用HTTPS绑定,是否有状态?

服务 B:

  • 它是无状态的、有状态的(因为使用了 IIS 会话)吗?

我想一个更普遍的问题是网络服务的状态是否取决于它的设计和实现方式或托管方式?是否有类似“清单”,我可以通过它来确定我的 Web 服务是归类为无状态还是有状态?

谢谢

【问题讨论】:

    标签: service stateful


    【解决方案1】:

    默认情况下,HTTP 上的任何内容都是无状态的。当您使用 PerSession 时,它仍然取决于您的 Web 服务实现是否使用 Sessions。但无论如何,您的 Web 服务器保持无状态,这正是您在特殊对象(缓存、文件、数据库或会话)中保留状态的时候。

    即使是 Session 也是无状态的:除非服务器在 HTTP 请求中发送 cookie,否则请求之间不会记住任何内容。

    对于 HTTPS,这不会改变。虽然它是一个完全不同的协议,但状态不会改变。

    关于您的清单:它会很短,因为它在 HTTP 中始终是无状态的。实现是否保持状态不会改变这一点。如何解决此限制并保持状态取决于实现,您无法在外部“看到”它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-01
      • 2017-03-29
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      相关资源
      最近更新 更多