【问题标题】:Can WCF handle simultaneous calls to the same endpoint?WCF 可以处理对同一端点的同时调用吗?
【发布时间】:2015-08-30 07:14:21
【问题描述】:

我正在暴露一个端点的 Windows 服务下开发 WCF 应用程序。大约有 40 个远程客户端将同时通过局域网连接到该端点。我的问题是 WCF 是否可以通过排队来处理对同一端点的多个调用?任何客户端的请求都不会丢失。在开发处理同时调用的应用程序时,我有什么特别需要考虑的吗?

【问题讨论】:

  • 是的,当然!如果 WCF 不能做到这一点,那将是非常糟糕的技术!
  • "任何客户端的请求都不会丢失。"这不可能。例如,网络可能会中断,或者您的代码可能有错误。

标签: c# wcf service


【解决方案1】:

您可以选择是异步处理请求还是一个接一个地同步处理。

您可以通过InstanceContextMode 设置来设置此行为。默认情况下,WCF 处理请求ByCall,这意味着将为每个传入请求创建一个服务实例。这允许您并行处理多个请求。

或者,您可以将服务配置为仅分离一个实例,以确保每个请求都在另一个请求之后得到处理。这实际上是您提到的“排队”。您可以通过InstanceContextMode.Single 设置此行为。通过选择此模式,您的服务将成为单例。因此,此模式可确保您的服务只有一个实例,在某些情况下可能会派上用场。框架处理排队。

此外,您可以设置ConcurrencyMode.Multiple,它允许您的单个实例并行处理多个请求(请参阅 Andrew 的评论)。

但是,请注意,排队的请求不会以任何方式持久化。因此,如果您的服务重新启动,尚未完成的请求将丢失。

如果可能,我绝对建议避免使用任何类型的单例。 有什么阻止您选择并行 PerCall 模式吗?

更多详情请查看:http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per

【讨论】:

  • 如果使用Single模式,我必须自己组织排队还是由框架利用?如果通过框架有什么方法可以判断何时可以为下一个呼叫提供服务? “靠近”是什么意思?有什么限制?我现在只是评估 WCF 的局限性,看看它是否能满足我的项目需求。
  • 要获得完整的答案,您应该在 ConcurrencyMode.Multiple 中包含单实例模式 msdn.microsoft.com/en-us/library/ms731193(v=vs.110).aspx
【解决方案2】:

这里有一些有用的链接:

https://msdn.microsoft.com/en-us/library/ms752260(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/hh556230(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute(v=vs.110).aspx

要回答您的问题,无论您选择什么,都不会丢失任何呼叫。但是如果您需要按顺序处理它们,您可能应该将此设置用于您的服务

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, EnsureOrderedDispatch = true )]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多