WCF 配置服务器以记住数据

本文关键字:数据 配置 服务器 WCF | 更新日期: 2023-09-27 17:56:37

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

在任何时候,客户端都应该能够检索一些数据。它由用户自行决定(单击按钮时,将发送 AJAX 查询以获取某些数据)。

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

我想知道如何解决这个问题。我尝试使用会话,因为我正在寻找某种方法,可以为想要连接到它的每个客户端实例化我的"服务器对象"。还是没有运气。

这个问题与此有关:WCF 关闭连接/释放资源

WCF 配置服务器以记住数据

听起来也许

您正在寻找 WCF 持久服务(链接)。 持久服务可以在对服务的调用之间保持状态。

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

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

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

如果是这样,这就解释了您的问题 - 该状态将被调用状态更改操作的下一个客户端覆盖。

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

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

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

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