教你利用wcf回调操作解决死锁问题

教你利用wcf回调操作解决死锁问题

ID:11004134

大小:31.00 KB

页数:2页

时间:2018-07-09

教你利用wcf回调操作解决死锁问题_第1页
教你利用wcf回调操作解决死锁问题_第2页
资源描述:

《教你利用wcf回调操作解决死锁问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、教你利用WCF回调操作解决死锁问题死锁这个问题是很麻烦的,我们现在就这个问题分析一下,这里提供了方案则是将WCF回调操作设置为单向操作。此时,回调调用不会产生应答消息,服务操作一旦执行了WCF回调操作,就会继续执行,回调对象不会争用与服务实例关联的锁,从而解决了死锁问题。1.interface IMyContractCallback  2.{  3.[OperationContract(IsOneWay = true)]  4.void OnCallback( );  5.}  使用回调对象时,需要考虑到客户端代理可能会被关闭,如果此时调用回调,就会引发一个ObjectDisposedExce

2、ption异常。“因此,对于客户端而言,当它不再需要接收回调或者客户端应用程序已经关闭时,最好能够通知服务。”本书给出了解决这一问题的方法,就是为服务契约增加两个操作Connect()与Disconnect()。其中,Disconnect()正是起到了通知服务的作用,它在客户端代理关闭的情况下,可以将当前的WCF回调对象引用从列表中移除。至于Connect()方法则是出于对称的目的而引入,但引入它还有一个好处是,它可以使得客户端能够多次地连接或断开。实现Connect()与Disconnect()方法的代码如下:6.static List m_Call

3、backs = new List( );  7.public void Connect( )  8.{  9.IMyContractCallback callback = OperationContext.Current.  10.GetCallbackChannel( );  11.if(m_Callbacks.Contains(callback) == false)  12.{  13.m_Callbacks.Add(callback);  14.}  15.}  16.public void Discon

4、nect( )  17.{  18.IMyContractCallback callback = OperationContext.Current.  19.GetCallbackChannel( );  20.if(m_Callbacks.Contains(callback) == true)  21.{  22.m_Callbacks.Remove(callback);  23.}  1.else  2.{  3.throw new InvalidOperationException("Cannot find callback");  4.}  5

5、.}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。