如何提高WCF的执行效率

2025-05-09 17:19:16
推荐回答(1个)
回答1:

下面是我的各处配置:


































[ServiceContract(CallbackContract=typeof(IBaseDataCallBack))]
public partial interface IBaseDataManage
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public partial class BaseDataManage : IBaseDataManage
wcfbindingbehavior
性能不好的原因很多:
1、事务:事务是需要同步上下文和会话,因此发生阻塞,若达到会话连接最高值,之后的会话需排队甚至超时;解决:将支持事务与非事务的服务分开成不同的服务;
2、回调:回调需要采用独立线程或线程池执行回调操作,否则可能在回调时因掉线、长时间运算、超时等因素造成会话一直占用或长时间占用,尽可能在设计上让服务IsOneWay=true;
3、在服务器资源允许的情况下:采用InstanceContextMode.PerCall,UseSynchronizationContext=false,ConcurrencyMode = ConcurrencyMode.Multiple,这种能最大的并发应用。
4、吞吐量配置,我不知道配置文件如何配,我自己是写了一个ServiceThrottlingAttribute,继承Attribute和IServiceBehavior,最后配置最大连接数 MaxConcurrentSessions (WCF默认为10),上下文实例数 MaxConcurrentInstances,最大待处理消息数或回调数,MaxConcurrentCalls(WCF默认64),
5、以上仅是我配置过的,可能有些解释不正确,但通过这样的改动后,并发和性能都得到很大的提升,由于我这里是工作流服务,目前最高有3000-5000工作流在同时运行,并没有发生明显的阻塞