我最近开始开发相对简单的WCF REST服务,该服务返回JSON格式的结果。最初,一切工作正常,该服务迅速启动并运行。
服务的主要功能是返回从数据库提取的大量数据。这些数据很少更改,因此我决定尝试建立一种缓存机制以加快处理速度。为此,我计划设置InstanceContextMode.Single和ConcurrencyMode.Multiple,然后使用一些线程锁安全地返回静态缓存的结果。每隔5分钟左右,或者每当IIS决定清除所有内容时,就会从数据库中重新获取数据。
我的问题是InstanceContextMode.Single的行为不符合预期。我的理解是应该创建和维护WCF服务类的单个实例。但是,我的行为是每次调用都会创建Class的一个全新实例。这包括重新初始化所有静态变量。
我尝试将Web服务从webHttpBinding(用于REST)更改为wsHttpBinding,然后将该服务用作SOAP配置,但这会导致完全相同的行为。
我究竟做错了什么!!!花了太长时间试图解决这个问题。
任何帮助将是巨大的!
最佳答案
奇怪,您能尝试一下,然后告诉我会发生什么吗?
ServiceThrottlingBehavior ThrottleBehavior = new ServiceThrottlingBehavior();
ThrottleBehavior.MaxConcurrentSessions = 1;
ThrottleBehavior.MaxConcurrentCalls = 1;
ThrottleBehavior.MaxConcurrentInstances = 1;
ServiceHost Host = ...
Host.Description.Behaviors.Add(ThrottleBehavior);
并且[如何]您知道您的单个服务实例不是“单个”吗?您看到了来自Profiler的多个数据库连接?这是什么提示您为什么您的服务不是单个实例?从您的服务操作实现中,您是否在单独的线程上完成一些工作?
关于json - WCF wsHttpBinding,webHttpBinding和REST中的InstanceContextMode.Single,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12852371/