“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
{
	//哒哒哒...
}


posted @ 2012-05-11 10:05  beta2013  阅读(276)  评论(0编辑  收藏  举报