WCF实现双工通讯及客户端调用
新建一个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实现双工通讯及客户端调用相关推荐
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
- WCF 入门之旅(4): 怎样用客户端调用WCF服务
WCF 入门之旅(4): 怎样用客户端调用WCF服务 前面的demo已经能够跑起来,现在开始考虑用客户端来测试所写的应用了,首先用个普通的应用程序来调用所写的wcf服务吧.其实最后运行wcf服务后的页 ...
- 转载——Java与WCF交互(一):Java客户端调用WCF服务
最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...
- Java与WCF交互(一):Java客户端调用WCF服务
最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...
- BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式
BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式 BizTalk Server 2006 ...
- WCF系列教程之WCF客户端调用服务
1.创建WCF客户端应用程序需要执行下列步骤 (1).获取服务终结点的服务协定.绑定以及地址信息 (2).使用该信息创建WCF客户端 (3).调用操作 (4).关闭WCF客户端对象 二.操作实例 1. ...
- WCF分布式开发常见错误(3):客户端调用服务出错
我们手动编码使用客户端调用WCF服务的时候会出现服务不支持 .Net Framing的错误, 具体信息如下: You have tried to create a channel to a servi ...
- WCF 客户端调用服务操作的两种方法
本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: 1 u ...
- 客户端调用 WCF 的几种方式
转载网络代码.版权归原作者所有..... 客户端调用WCF的几种常用的方式:1普通调用var factory = new DataContent.ServiceReference1.CustomerS ...
最新文章
- 斯皮尔曼相关系数范围_数据的相关系数
- QT自定义窗口插件在QT Creator的应用
- hibernate的一种报错
- 关于Git下载上传项目的操作指令
- C# 配置文件 自定義結點
- 树莓派内核开发准备(内核源码获取、启动过程、源码目录树)
- 进程间的通信IPC(无名管道和命名管道)
- nyoj--79--导弹拦截(动态规划)
- linux 等待进程,Linux 进程等待队列
- 如何从0-1制作数据大屏,我用大白话给你解释清楚了
- pytorch visdom蓝屏和无法启动
- 闲来无事写写-Huffman树的生成过程
- 疫情之下,从一座空城,到另一座空城,第一次看到这么寂寞的杭州
- 教你 用c语言输出乘法口诀表 一giao我嘞gaiogiao
- 条码生成器如何生成GS1-128条码
- 团队项目开发编码规范
- access select max_从峰米4k激光家庭影院Max开始,爱上看电影
- IC 后端仿真: process corner 和 PVT
- 财神来了 | 存量资金博弈下,是谁在吸血
- 2012服务器系统配置DNS,win服务器2012配置dns
热门文章
- HTML+CSS一篇文章搞定
- idea run with coverage异常
- java闹钟_JAVA 闹钟程序
- 飞机机器人特摄片_机器人大战怪兽-好莱坞的特摄片「环太平洋」
- 排序算法——冒泡排序(Bubble Sort)
- 实验一:彩色空间转换(YUV2RGB)
- IP地址转换(C++)
- 微软xcloud服务器,微软公布云游戏服务Project xCloud详情 2019年公测
- 利用python下载钉钉群直播视频
- python shp文件_对python 读取线的shp文件实例详解