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