WCF三种通信方式
一、概述
WCF在通信过程中有三种模式:请求与答复、单向、双工通信。以下我们一一介绍。
二、请求与答复模式
描述:
客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序
[OperationContract]
string ShowName(string name);
二、单向模式
描述:
客户端向服务端发送求,但是不管服务端是否执行完成就接着执行下面的程序。如下图所示:
[OperationContract(IsOneWay = true)]
void ShowName(string name);
特点:使用 IsOneWay=true 标记的操作不得声明输出参数、引用参数或返回值
三、双工模式
描述:
双工模式建立在上面两种模式的基础之上,实现客户端与服务端相互的调用。相互调用:以往我们只是在客户端调用服务端,然后服务端有返回值返回客户端,而相互调用不光是客户端调用服务端,而且服务端也可以调用客户端的方法
在上图中,客户端的程序A调用服务端的程序A,服务程序A执行完成前又调用客户端的程序D,然后再返回到程序A,图有点乱,其实就是为了说明“服务端”与“客户端”可以相互调用,下面直接看代码。
支持回调的绑定有4种:WSDualHttpBinding、NetTcpBinding、NetNamedPipeBinding、NetPeerTcpBinding。我们这里用NetTcpBinding为例
服务端实现方式:
[ServiceContract(CallbackContract =typeof(IDongCallBack))]
public interface IPuseService
{
[OperationContract]
string DoWork(string name);
}
public class PuseService : IPuseService
{
public string DoWork(string name)
{
var callBack= OperationContext.Current.GetCallbackChannel<IDongCallBack>();
callBack.GetName("双工"+ name);
return "WCF服务";
}
}
回调接口:
public interface IDongCallBack
{
[OperationContract(IsOneWay =true)]
void GetName(string name);
}
//配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" 【有坑,必须改成false】 httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="T_WCF.PuseService">
<endpoint address="" binding="netTcpBinding"【必须改】 contract="T_WCF.IPuseService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding"【必须改】 contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="【必须改】net.tcp://localhost:8733/Design_Time_Addresses/T_WCF/PuseService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
客户端实现方式:
class Program
{
static void Main(string[] args)
{
InstanceContext instanceContext = new InstanceContext(new CallbackHandler());
PuseServiceClient client = new PuseServiceClient(instanceContext);
var result = client.DoWork("wds");
Console.WriteLine(result);
Console.ReadKey();
}
} class CallbackHandler : IPuseServiceCallback【这个需要F12进入PuseServiceClient,看里面的回调名称 】
{
public void GetName(string name)
{
Console.WriteLine(name);
}
}
WCF三种通信方式的更多相关文章
- activemq的三种通信方式
一.安装与启动 1.下载安装activemq,下载地址:http://activemq.apache.org/download.html. 2.安装完成后,进入其所在目录的bin目录下面,根据系统位数 ...
- Open Interface Service WCF三种通信模式
WCF三种通信模式 一.请求响应模式: 概念:客户端发送请求,一直等待服务端响应,在此期间处于等待(假死)状态:直到服务器响应,才能继续执行其他的操作: 即使返回值是void 也属于请求与答复模式. ...
- 应用六:Vue之父子组件间的三种通信方式
(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 组件是Vue的核心功能之一,也是我们在开发过程中经常要用到的.各个独立的组件之间如何进行数据 ...
- WCF三种通信模式
WCF在通信过程中有三种模式:请求与答复.单向.双工通信. 请求与答复模式 描述:客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 ...
- vue的三种通信方式
一 确定组件关系二 使用第一步确定的组件关系在下面找到使用方法 1 父子通信(子组件使用父组件数据渲染) a) 在 子组件 中添加props props: [自定义prop名字] b) 在子组件中把自 ...
- 基于Linux的USB 主/从设备之间通讯的三种方式
转载:http://archive.eet-china.com/www.eet-china.com/ART_8800323770_617693_TA_eda530e7.HTM 随着简单易用的USB接口 ...
- Vue组件之间通信的三种方式
最近在看梁颠编著的<Vue.js实战>一书,感觉颇有收获,特此记录一些比价实用的技巧. 组件是MVVM框架的核心设计思想,将各功能点组件化更利于我们在项目中复用,这类似于我们服务端面向对象 ...
- 十五天精通WCF——第一天 三种Binding让你KO80%的业务
转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...
- WCF实例管理的三种方式
很多情况下,我们都需要控制wcf服务端对象的初始化方式,用来控制wcf实例在服务端的存活时间. Wcf框架提供了三种创建wcf实例的方式. WCF服务对象实例化基础 在普通的WCF请求和相应过程中,将 ...
随机推荐
- 20165325《Java程序设计》第九周学习总结
一.教材学习笔记 ch13 1.URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序. 一个URL对象通常包含最基本 ...
- 虚拟机安装CentOS配置静态IP
在VMware中安装Linux虚拟机后(比如CentOS6.*),不能访问网络,需要配置静态IP.虚拟机中推荐使用NET模式进行网络连接,在虚拟机的工具栏点击编辑>虚拟网络编辑器>NET模 ...
- wxpy: 用 Python 玩微信【转】
转自:https://wxpy.readthedocs.io/zh/latest/index.html 微信机器人 / 可能是最优雅的微信个人号 API wxpy 在 itchat 的基础上,通过大量 ...
- 【转】C++中substr的用法
substr有2种用法:假设:string s = "0123456789"; string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾 ...
- Markdown中Latex 数学公式基本语法
原文地址:http://blog.csdn.net/u014630987/article/details/70156489 Markdown中Latex 数学公式基本语法 公式排版 分为两种排版: - ...
- json-lib转化java对象,是否转化为null的属性
public static void main(String[] args) throws Exception{ User user = new User(); user.setUid(25); Js ...
- java对图片进行透明化处理
package utils; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; ...
- 【ORIGINATE】详解
originate 用法如下: originate <call url> <exten> |&<application_name>(<app_args ...
- C和C++相互调用
在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题.近来在主程序是C语言,而调用C++功能函数的时候,C++的*.h头文件都能找到,功能函数也都定义了,最重要 ...
- spring、springMVC、mybatis配置文件
一.jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicod ...