找传奇、传世资源到传世资源站!

WCF双工订阅发布模式DEMO

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

【例子介绍】

【相关图片】

from clipboard

【源码结构】


 
下面就是我们服务的实现了,服务的实现很简单,仅仅是捕获到客户端的回调通道,对集合进行操作。这里需要注意的是ServiceBehavior标记的InstanceContextMode属性的设置。我们需要为每一个单独的通道创建新的实例,但是在调用玩服务后,不对通道立刻进行回收,因此我们需要设置为InstanceContextModel.Single。
  PushService /// <summary>
    /// 服务的实现
    /// Tips:
    /// 实现发布订阅,要注意:每个信道在调用后不要回收,否则会在回调时报错
    /// </summary>
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class PushService : IPushService
    {
        public void Regist()
        {
            IPushCallback callbackChannel = OperationContext.Current.GetCallbackChannel<IPushCallback>();
            //添加到管理列表中
            ChannelManager.Instance.Add(callbackChannel);

        }

        public void UnRegist()
        {
            IPushCallback callbackChannel = OperationContext.Current.GetCallbackChannel<IPushCallback>();
            //从管理列表中移除
            ChannelManager.Instance.Remove(callbackChannel);
        }
    }
这样我们的服务基本就完成了,置于客户端的调用,需要创建一个双工通道对象,并且将实现了回调契约的类型,传给InstanceContext属性。
这篇文章很简单,没有涉及到对产生异常的通道的处理,也没有考虑到Silverlight调用时遇到的跨域问题,同时不支持HttpGet。
文章的目的只有一个,就是尽可能简洁的体现发布订阅服务的原理。
有兴趣的读者,可以对服务进行扩展,对服务在广播时可能产生的各种异常进行处理。
由于文章的例子是基于TCP/IP的通迅方式,使用的是netTcpBinding的全双工模式,因此使用HttpGet的时候需要进行一些额外的设置。
并且由于是自托管服务,寄宿在控制台应用程序中,因此跨域文件的提供方式也不太相同。

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复