gpt4 book ai didi

c# - 了解 WCF ServiceBehaviorProperty ConcurrencyMode

转载 作者:行者123 更新时间:2023-11-30 14:39:48 25 4
gpt4 key购买 nike

我想了解 ServiceBehavior.ConcurrencyMode 属性。

在服务端考虑以下代码:

[ServiceContract]
public interface IMySercice {
[OperationContract]
int mycall(int a);
}
/*** HERE I WILL GENERATE Two variants of this code ***/
[ServiceBehaviour(InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
// Constructors...
// implementations of interface
public int mycall(int a) { ... }
}
class Program {
static void Main(string[] args) {
MyServiceMyS = new MyService(...); /* Creating service instance */
Uri MyUri = new Uri("http://services.mycompany.com/services/"); /* Base address for my hosted service */
using (ServiceHost host = new ServiceHost(MyS)) { /* Defining service host, configuration file contains info regarding endpoints, not shown here for clarity */
host.Start();
host.Stop();
}
}
}

现在考虑我想调用此服务,请考虑网络中有 10 台机器可以调用我的服务。在某一时刻,碰巧这 10 台机器同时发出了 10 个请求 int mycall(int a)。我想检查这些场景:

场景 1

...
/*** VARIANT 1 ***/
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
...
}
...

情景 2

...
/*** VARIANT 2 ***/
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContext = InstanceContextMode.Single)]
public class MyService : IMyService {
...
}
...

那么,同时有 10 个调用到达……在这两种情况下会发生什么情况?请告诉我我是对还是错:

在场景 1 中,单线程,这 10 个调用排队并一次执行一个。我的服务(THE SAME INSTANCE OF MY SERVICE)的方法会依次被调用十次。在场景 2 中,多线程,WCF 将导致 10 个线程同时调用我的服务方法。

我说的是真的吗?谢谢

最佳答案

在这两种情况下,所有 10 个客户端都将由 10 个不同的线程并行服务。原因是 ConcurrencyMode 设置依赖于 InstanceContextMode 设置。 InstanceContextMode 定义 WCF 引擎服务器客户端请求的方式 - 如果请求到达,如何创建服务的新实例:

  • PerCall - 每个请求都由服务的新实例提供服务
  • PerSession - 来自单个代理实例的所有请求都由同一个服务实例提供服务
  • 单一 - 每个主机单一 - 所有请求都由服务的同一个实例提供服务

因此,如果您还使用 InstanceContextMode.Single,那么您的描述将是正确的,但对于不支持 session 的绑定(bind)(basicHttpBinding、webHttpBinding、wsHttpBinding 没有安全上下文或可靠 session )或 PerSession 绑定(bind)支持 session (netTcpBinding、netNamedPipeBinding、wsHttpBinding 在使用安全上下文的默认配置中)。

ConcurrencyMode 定义在多个请求想要访问服务实例时如何使用它。例如,具有Multiple 并发的PerCall 实例与Single 并发相同,因为无论并发设置如何,每个实例都只用于服务一个请求。

关于c# - 了解 WCF ServiceBehaviorProperty ConcurrencyMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com