2011-03-10 168 views
1

我有两个wcf服务,使用http绑定在IIS中承载相同的接口。两者只有三种方法:Web服务状态

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

  2. Write(userid, X)其中写入X置于

  3. Close(userid)其关闭该文件

InstanceContextMode =InstanceContextMode.PerSession用于服务B.

服务A的文件:

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

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

服务B:

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

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

谢谢

回答

2

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

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

对于HTTPS,这不会更改。虽然它是完全不同的协议,但状态并没有改变。

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