承接”入门.2 “,采用双工消息交换模式实现客户端,服务器交互;该应用场景中,客户端关系服务调用结果且不希望阻塞当前调用线程
工程结构描述
server 提供服务
protocal 服务协议
client 服务使用者
涉及到的类型
indata输入结构化数据
iser 服务协议
isercallback 服务回调协议
outdata 输出结构化数据
ser 服务实现
sercallback 服务回调实现
关键代码段
服务协议,通过属性指定需会话

        [ServiceContract(Namespace = "szgamer",
                Name = "ser",    
                SessionMode = SessionMode.Required,
                CallbackContract= typeof(isercallback))]
        public interface iser
        {
                [OperationContract(Name= "f",
                        IsOneWay= true)]
                void f(indata data);
        }
服务实现,每个会话一个服务实例,私有属性获取当前会话实例

        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
        public class ser : iser
        {
                public void f(indata data)
                {
                        outdata od = new outdata();
                        od.s = data.s;

                        callback.fcallback(od);
                }

                isercallback callback
                {
                        get { return OperationContext.Current.GetCallbackChannel<isercallback>(); }
                }
        }

客户端回调实现

        public class sercallback : ser.serCallback
        {
                public void fcallback(outdata data)
                {
                        Console.WriteLine(data.s);
                }
        }
配置采用 SvcConfigEditor.exe 编辑如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
        <system.serviceModel>
                <behaviors>
                        <serviceBehaviors>
                                <behavior name="serBehavior">
                                        <serviceMetadata httpGetEnabled="true" />
                                </behavior>
                        </serviceBehaviors>
                </behaviors>
                <services>
                        <service behaviorConfiguration="serBehavior" name="szgamer.ser">
                                <endpoint address="" binding="wsDualHttpBinding" bindingConfiguration=""
                                        contract="szgamer.iser" />
                                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                                        contract="IMetadataExchange" />
                                <host>
                                        <baseAddresses>
                                                <add baseAddress="http://localhost:8000" />
                                        </baseAddresses>
                                </host>
                        </service>
                </services>
        </system.serviceModel>
</configuration>
操作
客户端每次回车,显示 xxx 信息
说明:
双工消息通讯需会话支持
客户端需指定回调终结点

转载于:https://blog.51cto.com/szgamer/185118

[wcf]入门.3.4相关推荐

  1. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

  2. WCF 入门之旅(4): 怎样用客户端调用WCF服务

    WCF 入门之旅(4): 怎样用客户端调用WCF服务 前面的demo已经能够跑起来,现在开始考虑用客户端来测试所写的应用了,首先用个普通的应用程序来调用所写的wcf服务吧.其实最后运行wcf服务后的页 ...

  3. WCF入门的了解准备工作

    了解WCF, 及WCF入门需要掌握哪里基本概念? 1.准备工作 >1.1 . XML >1.2 . Web Service >1.3 . 远程处理 (RPC) >1.4.  消 ...

  4. C#-异步编程及WCF入门

    异步编程 异步代码在等待I/O请求响应的同时,可通过生成更多的线程,处理更多的请求 异步代码在等待I/O请求的同时,可生成UI交互线程,并通过将耗时的工作转移到其他CPU内核的方式,让UI的响应速度更 ...

  5. WCF入门(一)——简单的示例

    这篇随笔写了一段时间了,当时没有发布,今天整理文档的时候发现了,顺便给配了些图.主要是绍了一下WCF编程模型,并给了一个简单的示例. 概述 WCF框架是下一代.NET平台通信应用程序的核心.它包含了W ...

  6. WCF入门教程(vs2010)

    这几天挺别人提起WCF,鄙人之前只知道WPF,对WCF这个东东不甚了解,经过查阅网上的资料略有所得,和大家交流一下. 首先WCF是什么? Windows Communication Foundatio ...

  7. WCF入门(三)——对象序列化

    对象序列化 WCF是通过网络实现远程方法调用的,因此参数,返回值等都需要序列化才能在网络间传输.例如,对于下面的一个服务: [ServiceContract]     public interface ...

  8. WCF入门(六)——回调

    在上篇文章中介绍了一下WCF中的客户端到服务器端的单向通知,在实际应用中,还经常使用服务器端到客户端的单向通知.例如,在聊天室里,我们需要把某人的发言广播给每一个人.对于这种单向通知,我们一般称为回调 ...

  9. WCF入门(八)——异常处理2

    从前文中我们了解到,对于服务器端抛出的异常,WCF框架会把它封装成FaultException返回给客户端.系统自己封装的FaultException携带的信息往往不够,为了通知客户端更多异常信息,需 ...

最新文章

  1. SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
  2. java正则表达式替换指定字符串_笔记_正则表达式替换字符串中特定范围内的字符。...
  3. Django04: ORM配置与使用MySQL数据库
  4. python 选择多个文件夹_如何同时选择多个文件?
  5. 遍历strs数组,并判断数组中每一个元素的长度, * 将长度为偶数的元素和长度为奇数的元素分别存放在两个集合中,
  6. [译] Bounds Check Elimination 边界检查消除
  7. php修改ini文件内容,php上传大文件需要修改的php.ini配置文件
  8. 【重学计算机】计组D1章:计算机系统概论
  9. 《实施Cisco统一通信管理器(CIPT1)》一2.7 总结
  10. 如何防止sql注入?防止sql注入方法介绍
  11. (二)电子器件、电子技术和电子电路
  12. VMware安装esxi6.7
  13. 实验一:常用网络命令操作
  14. null 和 undefined 的区别
  15. 金字塔图表 html,Highcharts 柱形图(柱状图及条形图)之 金字塔图 演示
  16. 【语音从零之五】用科大讯飞语音包实现语音打开已安装应用程序
  17. BeautifulSoup里“find_all“和“findAll“的区别
  18. C#实现批量高斯投影正算、反算
  19. opencv识别图像红色区域,并输出红色区域中心点坐标
  20. html网页播放器编辑代码大全

热门文章

  1. JVM NativeMemoryTracking 分析堆外内存泄露
  2. IDisposable实现的方法什么时候被执行的
  3. ITU-T Technical Paper: IP网络测量模型
  4. poj 3740 Easy Finding
  5. Android内存泄漏简介
  6. MVC的Model Binder总结
  7. C# 简单软件有效期注册的实现【原】
  8. 在项目中使用react
  9. ceph 集群 健康状态 监管
  10. SpringMVC+Hibernate+Junit4+json基本框架近乎0配置