我最近开始开发一个相对简单的 WCF REST 服务,该服务返回 JSON 格式的结果。起初一切都很好,服务很快就启动并运行了。
该服务的主要功能是返回从数据库中提取的大量数据。这些数据很少改变,所以我决定尝试设置一个缓存机制来加快速度。为此,我计划设置 InstanceContextMode.Single 和 ConcurrencyMode.Multiple,然后使用一些线程锁,安全地返回静态缓存结果。每 5 分钟左右,或者每当 IIS 决定清除所有内容时,就会从数据库中重新获取数据。
我的问题是 InstanceContextMode.Single 未按预期运行。我的理解是应该创建和维护我的 WCF 服务类的单个实例。但是,我的行为是每次调用都会创建我的类的一个全新实例。这包括重新初始化所有静态变量。
我尝试将 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);
而且 [如何] 您知道您的单一服务实例不是“单一”的?您从分析器中看到了多个数据库连接?这就是为什么您的服务不是单个实例向您提出的建议吗?在您的服务操作实现中,您是否在单独的线程上执行某些工作?
关于json - InstanceContextMode.WCF wsHttpBinding、webHttpBinding 和 REST 中的 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12852371/