我有两个wcf服务,使用http绑定在IIS中托管相同的接口。两者都只有三种方法:
OpenFile(userid)
创建或打开userid.txt。
Write(userid, X)
将X写入文件
Close(userid)
关闭文件
InstanceContextMode =InstanceContextMode.PerSession
用于服务B.
服务A:
是无状态的(服务技术上不需要记住用户ID,它是由客户端跟踪的)还是有状态的(服务操作就像状态机。客户端必须按特定顺序调用方法)?
如果使用HTTPS绑定,是否有状态?
服务B:
我想一个更普遍的问题是,Web服务的状态是否取决于它的设计和实现方式或托管方式?是否有一个“清单”,我可以通过它来确定我的网络服务是否归类为无国籍或有状态?
由于
答案 0 :(得分:2)
默认情况下,HTTP上的任何内容都是无状态的。使用PerSession时,它仍取决于您的Web服务实现是否使用Sessions。但无论如何,您的Web服务器仍然是无状态的,这正是您在特殊对象(缓存,文件,数据库或会话)中保留状态的时候。
即使是Session也是无状态的:除非服务器在HTTP请求中发送cookie,否则请求之间不会记住任何内容。
HTTPS不会改变。虽然这是一个完全不同的协议,但有状态不会改变。
关于您的清单:它会很短,因为HTTP始终是无状态的。实现是否维持状态不会改变这一点。由实施如何解决这个限制并保持状态,你不能在外面“看到”。