“WCF访问死锁”问题及解决
一 现象
出现服务调用久未返回,VS提示“deadlock”之类的异常信息。
二 原因分析
属于服务并发管理,包含以下2种:
1、客户端回调死锁
修改客户端回调实现的回调行为的并发模式
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] private class Client : IVisitorServiceClient { //哒哒哒... }
也可采用将回调接口的操作行为设为“IsOneWay=true”
[ServiceContract] interface IVisitorServiceClient { [OperationContract(IsOneWay=true)] void SayHelloCalllBack(); }
采用哪种方式视实际需求而定。
2、服务端服务死锁
修改服务实现的服务并发访问模式
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)] public class VisitorService : IVisitorService { //哒哒哒... }
勉強心を持てば、生活は虚しくない!