3

我最近开始开发一个相对简单的 WCF REST 服务,它返回 JSON 格式的结果。起初一切都很好,服务很快就启动并运行了。

该服务的主要功能是返回从数据库中提取的大量数据。这些数据很少改变,所以我决定尝试设置一个缓存机制来加快速度。为此,我计划设置 InstanceContextMode.Single 和 ConcurrencyMode.Multiple,然后使用一些线程锁,安全地返回静态缓存结果。每隔 5 分钟左右,或者每当 IIS 决定清除所有内容时,都会从数据库中重新获取数据。

我的问题是 InstanceContextMode.Single 没有按预期运行。我的理解是应该创建和维护我的 WCF 服务类的单个实例。但是,我的行为是每次调用都会创建我的 Class 的全新实例。这包括重新初始化所有静态变量。

我尝试将 Web 服务从 webHttpBinding(用于 REST)更改为 wsHttpBinding 并将该服务用作 SOAP 配置,但这会导致完全相同的行为。

我究竟做错了什么!!!花了太长时间试图弄清楚这一点。

任何帮助都会很棒!

4

1 回答 1

0

奇怪,你能试试这个,然后告诉我会发生什么吗?

ServiceThrottlingBehavior ThrottleBehavior = new ServiceThrottlingBehavior();
ThrottleBehavior.MaxConcurrentSessions = 1;
ThrottleBehavior.MaxConcurrentCalls = 1;
ThrottleBehavior.MaxConcurrentInstances = 1;

ServiceHost Host = ...
Host.Description.Behaviors.Add(ThrottleBehavior);

[如何] 你知道你的单一服务实例不是“单一的”吗?您从分析器中看到了多个数据库连接?这就是向您建议为什么您的服务不是单个实例的原因吗?从您的服务操作实现中,您是否在单独的线程上做一些工作?

于 2013-12-24T20:53:54.590 回答