1

在我们的应用程序中,提供了一个页面,该页面随后应该对更多数据进行并行异步调用。这些呼叫正在排队,我读到使用同一会话的呼叫已排队,因为有多个请求写入同一会话可能会引起并发症。

我还读到控制器可以设置为无会话[SessionState(SessionStateBehavior.Disabled)]或者[SessionState(SessionStateBehavior.ReadOnly)]我们不需要写入会话。

我已经尝试过这些,因为我不需要写入会话,所以我认为请求将同时提供,或者如果我在没有意识到的情况下使用会话,则会引发异常。

这两种情况都不是。来自同一用户的请求仍在排队中。

如何验证我的指令[SessionState(SessionStateBehavior.ReadOnly)]是否得到遵守?什么可能导致这个问题?

如果它是相关的,我们正在Orchard的背景下工作。

4

2 回答 2

2

在 Orchard 1.6 中,您可以将SessionStatea 的属性设置RouteDescriptorSessionStateBehavior.ReadOnlySessionStateBehavior.Disabled

因此,您需要做的就是在您的Routes类中创建一个新路由,该路由映射到您的控制器并具有上述之一SessionStateBehaviors。之后你不需要用SessionState属性装饰控制器。

于 2013-04-20T18:29:13.943 回答
1

这是因为用于每个 Orchard 路由请求的底层 HTTP 处理程序正在实现IRequiresSessionState接口。这就是每个请求实际上都排队的原因......

这是一个已知问题,我们将尝试在下一个 Orchard 版本中解决该问题,只要它不意味着重大更改。有几个核心功能(以及未知数量的外部自定义功能)依赖(或可能依赖)Session,因此简单地删除IRequiresSessionState接口不是一种选择。我们需要先重构一些东西并实现一些选择加入/退出机制。

于 2012-07-13T14:40:37.943 回答