WCF配置服务器以记住数据

我目前在WCF中有一个服务,它处理客户端发出的请求。 但是,它会缓存客户端发送的一些数据。 然后它对数据进行计算。

在任何时候,客户端都应该能够检索一些数据。 它由用户自行决定(当单击一个Button时,会发送一个AJAX查询来获取一些数据)。

我遇到的问题是,只要另一个客户端连接并开始发送请求,原始客户端发送的数据现在就会失真。

我想知道如何解决这个问题。 我试图使用会话,因为我正在寻找一些方法,我可以为每个想要连接它的客户端实例化我的“服务器对象”。 仍然没有运气。

此问题与此相关: WCF关闭连接/释放资源

听起来好像你正在寻找一个WCF耐用服务( 链接 )。 持久服务可以在服务调用之间保持状态。

Juval Lowy编程中的第4章WCF服务( 链接 )还包含有关持久服务以及每会话服务的信息,这些信息也可能有所帮助。

但是,一般而言,将WCF服务设置为无状态是一种良好的做法 – 即不要在调用之间保持任何状态。 持久服务通过将数据持久化来实现这一点,例如在调用之间将数据保存到数据库而不是实际将其保留在内存中(如果您有数千个并发服务使用者,这可能是一件坏事)。

您的服务如何配置实例/并发? 听起来您可能正在使用单例服务实例,并将数据存储在服务实例中?

如果这样可以解释您的问题 – 该状态将被下一个调用状态更改操作的客户端覆盖。

由于您的客户端是Web浏览器,您可能正在使用不支持WCF会话的webHttpBinding。

添加自己的会话概念的一种简单方法是将会话ID传递给您的操作,然后您可以使用该ID来查找请求的相关状态。

如果您想要更复杂一点,您可以调查从WCF请求中挖掘出Cookie信息并将其用于您的会话。

最复杂的解决方案是使用支持WCF会话概念的自定义WCF绑定(构建在cookie或会话参数之上)。 除非你可以谷歌一个现成的解决方案,否则可能不值得努力。