我正在Windows服务下开发WCF应用程序,它正在暴露一个端点。可以有大约40个远程客户端同时通过局域网连接到该端点。我的问题是WCF是否可以通过对它们进行排队来处理对同一端点的多次调用?任何客户的请求都不会丢失。在开发处理同时呼叫的应用程序时,我有什么特别需要考虑的事项吗?
答案 0 :(得分:0)
您可以选择是异步处理请求还是一个接一个地同步处理。
您可以通过InstanceContextMode
设置设置此行为。默认情况下,WCF处理请求 ByCall ,这意味着将为每个传入请求创建一个服务实例。这允许您并行处理多个请求。
或者,您可以将服务配置为仅分离一个实例,以确保每个请求都在另一个之后处理。这有效地是你提到的“排队”。您可以通过InstanceContextMode.Single
设置此行为。通过选择此模式,您的服务将成为单身人士。因此,此模式可确保您的服务只有一个实例,在某些情况下可能会派上用场。该框架处理排队。
此外,您可以设置ConcurrencyMode.Multiple
,允许您的单个实例并行处理多个请求(请参阅Andrew的评论)。
但是,请注意排队的请求不会以任何方式持久存在。因此,如果您的服务重新启动,则尚未完成的请求将丢失。
如果可能的话,我绝对建议避免任何类型的单身人士。 有没有什么可以阻止你选择并行 PerCall -mode? p>
详情请看: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 )]