Web服务状态

时间:2011-03-10 15:38:19

标签: service stateful

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

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

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

  3. Close(userid)关闭文件

  4. InstanceContextMode =InstanceContextMode.PerSession用于服务B.

    服务A:

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

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

    服务B:

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

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

    由于

1 个答案:

答案 0 :(得分:2)

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

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

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

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