“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

{

	//哒哒哒...

}


你可能感兴趣的:(WCF)