在wcf中使用session

net*_*jor 2 session wcf

如果我将我的servis实例设置为Per Session或Single,我可以在会话中的服务实例之间发送一些数据吗?它应该在Asp.net会话中完成 - HttpContext.Current.Session或wcf有自己的会话?

mar*_*c_s 11

正如我所说 - WCF不是ASP.NET,它的会话处理差别很大.虽然ASP.NET会话和WCF会话被称为相同 - 但它们的目的和用途却截然不同.

有关更多详细信息,请阅读MSDN页面使用WCF中的会话.

一句话是:没有与WCF会话相关联的通用数据存储.- 所以答案是否定的 - WCF中的会话不适用于数据存储.

WCF会话仅仅是将几条消息"绑定"到一个对话中.默认情况下,使用"per-call"模型,每个WCF服务请求将获得其自己的,新近实例化的服务类实例来处理请求,并且在返回答案后将释放该服务类实例.使用会话避免了这种情况 - 处理会话第一次调用的服务类实例将在服务器端保持活动状态(因此也占用服务器上的内存),并将处理同一会话中的所有后续请求.

但是,WCF和Web服务通常应该是无状态的,因此会话在适当的SOA环境中是一个奇怪的架构 - 这很可能是为什么WCF中的会话也不像ASP.NET会话对Web应用程序那么有用.

要保持无状态并支持per-call方法(首选的最佳实践),如果需要在调用之间存储数据,请将其存储在持久存储(例如数据库)中,并在以后需要时从那里获取数据.


chr*_*.00 5

如果您在IIS中托管服务,则可以启用ASP.Net Compatability模式.这将允许您使用ASP.Net会话状态,就像在Web应用程序中一样.