新建一个Windows窗体应用程序(即客户端Client)和一个WCF服务库(WCF双工)

在WCF双工项目下:

新建一歌ILogger接口和实现该接口的Logger类

在ILogger接口中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCF双工
{
    /// <summary>
    /// 1 将接口标记成一个双工通讯接口
    /// CallbackContract:回调的接口
    /// </summary>
    [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IResult))]
    public interface ILogger
    {
        /// <summary>
        /// 3 此方法也必须是一个数据报的方法
        /// </summary>
        /// <param name="logtxt"></param>
        [OperationContract(IsOneWay = true)]
        void WriteLog(string logtxt);
    }
    /// <summary>
    /// 2 接口的名称可以由程序员自行定义
    /// </summary>
    public interface IResult
    {
        /// <summary>
        /// 2.1 特点:此方法必须是一个数据报的方法
        /// </summary>
        /// <param name="msg"></param>
        [OperationContract(IsOneWay = true)]
        void WriteResult(string msg);
    }

}

需要注意:将接口标记为一个双工通讯接口,即添加[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IResult))]

其中IResult接口是为了实现双工通讯,该接口下的方法需要将特性设置为数据报的方法

Logger类中

using System.Diagnostics;
using System.ServiceModel;
namespace WCF双工
{
    public class Logger : ILogger
    {
        IResult iresult;
        /// <summary>
        /// 4.0 构造函数中接收在客户端实现了IResult的子类的对象实例
        /// </summary>
        public Logger()
        {
            //获取了客户端的IResult的具体实现类的对象实例
            //OperationContext当前执行方法的上下文
            //GetCallbackChannel执行当前回调的管道
            iresult = OperationContext.Current.GetCallbackChannel<IResult>();

}

//给客户端的调用的方法,需要等待休眠时间结束才返回,但线程不被影响

public void WriteLog(string logtxt)
        {
            //1.0 接收到数据以后需要5秒钟才能处理完成
            Stopwatch stop = new Stopwatch();
            stop.Start();
            System.Threading.Thread.Sleep(5000);
            stop.Stop();
            //2.0 通过回调客户端的函数将处理结果响应给客户端
            iresult.WriteResult("您的请求已经处理成功,耗时" + stop.Elapsed.Seconds + "秒钟");
        }
    }

}

注意:Logger构造函数接收在客户端实现了IResult的子类的对象实例,调用当前操作的客户端实例的管道

修改配置文件


在Client中

添加对WCF服务的引用

先启动WCF服务,在启动Client程序,结果视图如下

WCF实现双工通讯及客户端调用相关推荐

  1. 利用WCF的双工通讯实现一个简单的心跳监控系统

    何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...

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

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

  3. 转载——Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  4. Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  5. BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式

    BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式 BizTalk Server 2006 ...

  6. WCF系列教程之WCF客户端调用服务

    1.创建WCF客户端应用程序需要执行下列步骤 (1).获取服务终结点的服务协定.绑定以及地址信息 (2).使用该信息创建WCF客户端 (3).调用操作 (4).关闭WCF客户端对象 二.操作实例 1. ...

  7. WCF分布式开发常见错误(3):客户端调用服务出错

    我们手动编码使用客户端调用WCF服务的时候会出现服务不支持 .Net Framing的错误, 具体信息如下: You have tried to create a channel to a servi ...

  8. WCF 客户端调用服务操作的两种方法

    本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: 1 u ...

  9. 客户端调用 WCF 的几种方式

    转载网络代码.版权归原作者所有..... 客户端调用WCF的几种常用的方式:1普通调用var factory = new DataContent.ServiceReference1.CustomerS ...

最新文章

  1. 斯皮尔曼相关系数范围_数据的相关系数
  2. QT自定义窗口插件在QT Creator的应用
  3. hibernate的一种报错
  4. 关于Git下载上传项目的操作指令
  5. C# 配置文件 自定義結點
  6. 树莓派内核开发准备(内核源码获取、启动过程、源码目录树)
  7. 进程间的通信IPC(无名管道和命名管道)
  8. nyoj--79--导弹拦截(动态规划)
  9. linux 等待进程,Linux 进程等待队列
  10. 如何从0-1制作数据大屏,我用大白话给你解释清楚了
  11. pytorch visdom蓝屏和无法启动
  12. 闲来无事写写-Huffman树的生成过程
  13. 疫情之下,从一座空城,到另一座空城,第一次看到这么寂寞的杭州
  14. 教你 用c语言输出乘法口诀表 一giao我嘞gaiogiao
  15. 条码生成器如何生成GS1-128条码
  16. 团队项目开发编码规范
  17. access select max_从峰米4k激光家庭影院Max开始,爱上看电影
  18. IC 后端仿真: process corner 和 PVT
  19. 财神来了 | 存量资金博弈下,是谁在吸血
  20. 2012服务器系统配置DNS,win服务器2012配置dns

热门文章

  1. HTML+CSS一篇文章搞定
  2. idea run with coverage异常
  3. java闹钟_JAVA 闹钟程序
  4. 飞机机器人特摄片_机器人大战怪兽-好莱坞的特摄片「环太平洋」
  5. 排序算法——冒泡排序(Bubble Sort)
  6. 实验一:彩色空间转换(YUV2RGB)
  7. IP地址转换(C++)
  8. 微软xcloud服务器,微软公布云游戏服务Project xCloud详情 2019年公测
  9. 利用python下载钉钉群直播视频
  10. python shp文件_对python 读取线的shp文件实例详解