WCF可以处理对同一端点的同时调用吗?
本文关键字:调用 端点 处理 WCF | 更新日期: 2023-09-27 18:10:20
我正在Windows服务下开发WCF应用程序,该应用程序暴露了一个端点。可以有大约40个远程客户端同时通过局域网连接到此端点。我的问题是WCF是否可以通过排队来处理对同一端点的多个调用?任何客户端的请求都不能丢失。在开发处理同时呼叫的应用程序时,我有什么特别需要考虑的吗?
您可以选择一个接一个地异步处理请求还是同步处理请求。
您可以通过InstanceContextMode
设置设置此行为。默认情况下,WCF处理请求ByCall,这意味着将为每个传入请求创建一个服务实例。这允许你并行处理多个请求。
或者,你可以配置你的服务只派生一个实例,以确保每个请求都在另一个请求之后被处理。这实际上就是你提到的"排队"。您可以通过InstanceContextMode.Single
设置此行为。通过选择这种模式,您的服务变成了单例。因此,这种模式确保您的服务只有一个实例,这在某些情况下可能会派上用场。框架处理队列。
另外,你可以设置ConcurrencyMode.Multiple
,允许你的单个实例并行处理多个请求(参见Andrew的评论)。
但是,请注意,排队的请求不会以任何方式持久化。因此,如果您的服务重新启动,尚未完成的请求将丢失。
我强烈建议尽可能避免任何类型的单例。是否有任何东西阻止您选择并行PerCall-模式?
更多详细信息请查看:http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per
以下是一些有用的链接:
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 )]