Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF配置服务器以记住数据_C#_Asp.net_Wcf_Service_Asmx - Fatal编程技术网

C# WCF配置服务器以记住数据

C# WCF配置服务器以记住数据,c#,asp.net,wcf,service,asmx,C#,Asp.net,Wcf,Service,Asmx,我目前在WCF中有一个服务,它处理客户机发出的请求。但是,它会缓存客户端发送给它的一些数据。然后对数据进行计算 在任何时候,客户机都应该能够检索一些数据。这由用户自行决定(单击按钮时,将发送一个AJAX查询以获取部分数据) 我遇到的问题是,一旦另一个客户端连接并开始发送请求,原始客户端发送的数据现在就被扭曲了 我想知道如何解决这个问题。我尝试使用会话,因为我正在寻找某种方法,可以为每个想要连接到它的客户机实例化我的“服务器对象”。还是不走运 这个问题与此有关: 听起来您可能正在寻找WCF持久服务

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

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

我遇到的问题是,一旦另一个客户端连接并开始发送请求,原始客户端发送的数据现在就被扭曲了

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

这个问题与此有关:

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

Juval Lowy的编程WCF Services()中的第4章还提供了有关持久服务以及每会话服务的信息,这些信息可能也会有所帮助


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

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

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

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

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

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


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

请描述一下数据是如何被扭曲的。也许它不是被扭曲的,它只是不应该是这样。IE:我的客户机将服务器持有的变量设置为5,并期望稍后在某个点它仍然是5,但同时另一个客户机连接并发送了将该变量设置为6的请求。现在,当第一个客户需要它时,它将是6,而不是它所期望的5。本质上,我正在寻找一种方法,为每个连接到它的客户端创建一个本地服务器类,并在用户离开页面后处理这些本地类。