Man*_*ion 4 .net concurrency wcf web-services self-hosting
我开始开发以下场景(Visual Studio 2010,WCF):我们网络中的不同客户端将调用我自己开发的Web服务,该服务作为Windows服务的一部分托管,因此我们讨论的是自托管WCF Windows服务中的Web服务.
自托管的WCF Web服务将依次调用外部Web服务,因此就像一种外观.
显然,我的自托管WCF Web服务需要接受并发调用,这就是我的问题:我计划的是在我自己托管的WCF Web服务上从不同客户端调用的操作中,我只想创建客户端外部Web服务,调用外部Web服务,从外部Web服务获得同步响应,然后回复调用客户端.
听起来很简单,但是我需要考虑多个线程进入我的服务主机吗?显然我需要小心主机本身的任何"全局"变量,但如果我只是在被调用的Web服务的不同操作中创建外部Web服务客户端,或者我忽略了什么,我应该保存?
谢谢大家!
干杯,斯特沃
kd7*_*kd7 10
这里有一些选择,特别是因为它们与WCF实例化和并发性有关.
实例:你的选择是
并发:
让我们先看看Instancing:
每次呼叫:基本上发生的情况是,如果两个客户端呼叫您的服务,则会创建2个不同的服务实例,然后在呼叫完成后销毁
每个会话:如果这两个客户端通过您的代理分别进行2次调用,则在主机上为这两个调用创建的wcf实例将是相同的(对于每个代理,因此2个实例每个服务2个但每个调用者转到同一个实例) ,然后毁了
单一:代理/客户端将使用相同的实例,因此调用者1调用操作,然后调用者2进行调用,同一实例将被重用.
挺直的.
就并发性而言,它一次在上述实例上下文中活动的线程数.在这里,我有经验和MSDN,其中指出"理解和开发安全使用多个线程的代码可能难以编写"(但并非不可能)
因此,基于您的要求,似乎您不希望维护状态和可伸缩性可能会引起关注,因为您正在为多个代理调用提供服务,并且您不需要共享任何类型的全局数据,这需要单实例模式,那么最多可能的解决方案是:
[ServiceBehavior
(ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerCall)]
public class YourService: IYourService
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3073 次 |
| 最近记录: |