当前位置: 首页 > news >正文

WCF duplex 简单实例

1.定义两个接口
//客户端调用
 [ServiceContract(CallbackContract = typeof(IContractCallback))]
    public interface IContract
    {
        [OperationContract(IsOneWay = true)]
        void Foo(DataMember dt);
    }




//回调接口,服务器调用客户端代码,这个接口由客户端实现
    [ServiceContract]
    public interface IContractCallback
    {
        [OperationContract(IsOneWay = true)]
        void OnFooCallback();
    }




2.服务器实现接口
 
[DataContract]
    public class DataMember
    {
        [DataMember(IsRequired = true)]
        public int Id;


        [DataMember(IsRequired = true)]
        public string Name;
    }


    public class Service2 : IContract
    {


        [OperationBehavior(TransactionScopeRequired=true)]
        public void Foo(DataMember dt)
        {
            //do something 


            //...


            //call back,调用客户端的实现
            var callback = OperationContext.Current.GetCallbackChannel<IContractCallback>();
            callback.OnFooCallback();
        }
    }


3,客户端添加服务引用,实现callback接口
class MyCallback : IContractCallback
    {
        public void OnFooCallback()
        {
            Console.WriteLine("call back from server");
        }
    }




4.调用
var instance = new MyCallback();
            InstanceContext instanceContext = new InstanceContext(instance);
            ServiceReference2.ContractClient client = new ServiceReference2.ContractClient(instanceContext);
            client.Open();
            client.Foo(new ServiceReference2.DataMember() { Id = 1, Name = "111" });
            Thread.Sleep(2000);//之所以休眠2s再关闭连接是等待服务器回调结束
            client.Close();
            
            Console.ReadKey();


相关文章:

  • 控制台标准输出以及控制台错误是不同的
  • 几个常用SHELL命令
  • sharepoint 404 pagenotfound error
  • update rowstate of dataset
  • apache2.0.63配置代理连接weblogic923
  • sql find out record one-to-one
  • 使用 screen 管理你的远程会话
  • UltraWebGrid页面加载时选中第一行
  • 海水与火焰——领导眼中两种不同类型的员工
  • [Web开发] 检测IE版本号的方法总结
  • 你在世界的什么位置?
  • error while unload assembly from GAC assembly is being used by another process
  • ASP.NET中文件上传下载方法集合(上传限制,保存方式-二进制或文件形式,上传Internet上的资源 )...
  • c# change textbox / richtextbox each character size to same size
  • 京东模式靠谱吗?
  • 【面试系列】之二:关于js原型
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • AHK 中 = 和 == 等比较运算符的用法
  • Linux下的乱码问题
  • node-glob通配符
  • Vim 折腾记
  • Vultr 教程目录
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 浮动相关
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 智能合约开发环境搭建及Hello World合约
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (安卓)跳转应用市场APP详情页的方式
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (万字长文)Spring的核心知识尽揽其中
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)大型网站架构演变和知识体系
  • .net core Swagger 过滤部分Api
  • .NET Core WebAPI中封装Swagger配置
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET导入Excel数据
  • .NET框架
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .sys文件乱码_python vscode输出乱码
  • /3GB和/USERVA开关