WCF可以同时处理对同一端点的调用吗?

时间:2015-08-30 07:14:22

标签: c# wcf service

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

如果可能的话,我绝对建议避免任何类型的单身人士。 有没有什么可以阻止你选择并行 PerCall -mode?

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

答案 1 :(得分:0)

以下是一些有用的链接:

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 )]