Nul*_*nce 5 .net c# performance wcf
决定是使用PerSession还是使用PerCall的一般经验法则是什么?
我有一个稍微沉重的(我认为..)WCF服务,包含大约80个表的CRUD方法.
我已将WCF服务分为1个服务中的7个合同(即1个服务中的7个端点),这样每个合同都会处理自己的域,例如我有一个销售合同,所以所有与销售相关的表,以及相应的操作在销售"有界环境"内
所以我的WCF服务结构看起来像这样:
public partial class ABCService : ISalesService
{
//CRUD methods of all tables related to Sales
}
public partial class ABCService : IMarketingService
{
//CRUD methods of all tables related to Marketing
}
public partial class ABCService : ICustomerService
{
//CRUD methods of all tables related to Customer
}
public partial class ABCService : IProductService
{
//CRUD methods of all tables related to Products
}
Run Code Online (Sandbox Code Playgroud)
我对PerCall的关注是,因为我有一个相当大的DB/WCF服务,我担心每次呼叫所消耗的资源量乘以用户数量和他们调用服务的速率将是太棒了.
我不知道细节,但我已经知道创建一个频道代理是昂贵的操作.
哦,我使用手动编码代理而不是VS的添加服务引用来使用我的WCF服务.
所以,我的问题是,我应该使用哪个?PerSession或PerCall?
更新:
Har*_*aid 18
在我看来,要做出决定考虑这两点
InstanceContextMode.PerSession- 如果您的用户在服务器上的WCF服务上存储了一些会话值.InstanceContextMode.PerCall- 如果您的用户在服务器上的WCF服务上没有存储任何会话,即WCF服务要求存储在内存中不需要每个用户设置.需要可扩展性.关于何时和为什么的一些观点,
PerCall,将只有100个对象实例化为100个活动呼叫.其次,如果服务器崩溃,那么在PerCall情况下,唯一会发生的错误将是正在进行的100个实际请求(假设快速故障转移).其他900个客户端可以在下次呼叫时路由到另一台服务器.PerSession您可能在服务器上实例化了1000个对象,但在任何时刻只有100个实际处于活动状态.因此,实例化的PerSession对象可能浪费资源,并可能影响在负载下提供请求的能力.其次,如果服务器崩溃,那么在PerSession该服务器上有会话的所有1000个客户端将丢失其会话并且无法完成其工作.参考链接: