【问题标题】:Create virtual queue for every session C#为每个会话 C# 创建虚拟队列
【发布时间】:2015-07-08 13:56:24
【问题描述】:

我想按顺序异步处理请求。我想为每个会话创建一个虚拟队列意味着单个队列中一个用户进程的所有请求,但另一个队列中另一个用户的请求。即两个用户的请求并行处理,但一个用户的请求应该按顺序处理。

我该如何实现呢?请建议。

提前致谢。

【问题讨论】:

  • 制作队列列表 ... List> ....
  • 你想要真正的异步......还是只有一种方式?用户是和你在网络上还是在互联网上?
  • @TomRedfern - 我想异步处理请求。互联网用户。
  • 您打算支持非 wcf 消费者吗?

标签: c# wcf asynchronous


【解决方案1】:

假设用户直接连接到您的服务而不是通过代理,您应该如下定义您的服务:

[ServiceBehavior(
    ConcurrencyMode=ConcurrencyMode.Single,
    InstanceContextMode=InstanceContextMode.PerSession,    
  )]

InstanceContextMode=InstanceContextMode.PerSession - 这意味着每个客户端在整个会话中为他的服务实例“获取”他自己的工作线程,因此多个客户端有多个线程。 ConcurrencyMode=ConcurrencyMode.Single - 表示客户端一次只能对服务进行一次调用,因此调用会按顺序处理。

【讨论】:

  • 会在这里回答同样的问题。但还有一点需要注意:在这种情况下,将 ServiceContractAttribute.SessionMode 属性设置为 Required 也应该会有所帮助。
  • 另外请注意,这仅在您使用 wsHttpBinding 时有效,这将您限制为仅来自 WCF 使用者的连接。如果您计划支持非 wcf,甚至非 Windows 消费者,那么您将无法使用这种方法。这是因为每个会话的实例化依赖于 WS-ReliableMessaging 和 WS-Security SOAP 扩展,这两者往往是不可互操作的。
  • 此外,几乎从不可以使用单例服务实例,尤其是当您希望通过 Internet 进行大量调用时。
猜你喜欢
  • 2016-06-13
  • 2023-03-23
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2011-05-15
相关资源
最近更新 更多