1

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

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

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

  3. Close(userid)关闭文件

InstanceContextMode =InstanceContextMode.PerSession用于服务 B。

服务一:

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

  • 如果使用 HTTPS 绑定,它是有状态的吗?

服务乙:

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

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

谢谢

4

1 回答 1

2

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

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

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

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

于 2011-03-10T15:42:00.363 回答