当前位置: 首页 > 编程日记 > 正文

十五天精通WCF——第六天 你必须要了解的3种通信模式

十五天精通WCF——第六天 你必须要了解的3种通信模式
原文:十五天精通WCF——第六天 你必须要了解的3种通信模式

wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“

模式,这个大家不用动脑子都清楚,这一篇我大概来分析下。

一:“请求-响应“模式

如果你看了我上一篇的博文,你应该非常清楚这种类似“本地调用”的方式,wcf同样也分为“同步”和“异步”两种,不过不管是异步还是同步,最终都逃

不过是“请求-响应”这个事实,对吧。

1: 同步方式

这种方式我想没什么好说的,前面几篇我已经说的非常清楚了,具体使用方法可以参考我的前面几篇文章。。。谢啦~~~~

2: 异步方式

通常我们都有这样的一个思维,遇到耗时的东西第一反应就想到了多线程,毕竟多线程也是一种负载均衡,在wcf这种”请求-响应“模式,同样也支持异

步,很神奇吧,而且神奇到可以在“服务引用“界面上做到一键生成,什么???你不信!!!!不信你看。。。

然后我非常好奇的看下XXXClient给我们生成的是个什么代码。。。

通过client端的proxy代码,你可以清楚的看到,这鸡巴WCF真的不容易,给我们生成了两种“异步模式”,第一种是最古老的beginXXX,endXXX模式,

还有一种是被Jeffrey Richter 严重鄙视的“事件异步模式”。。。没什么好说的,截图一下给大家看看。

二:“单向“模式

很多时候,我们或许都有这样的需求,比如说订单提交成功的时候,我需要给客户发送邮件,但是你想想,我发送邮件这个任务只是我订单流程的

一个“额外任务“,也就是说,它的失败不应该会阻止我的订单流程,并且它的逻辑时间不应该会阻碍我的下单总时间,对吧。。。这样的话,我的订单时

间才会最小化,为了达到不影响下单总时间的效果,我的想法就是,client端直接把消息丢给信道就好了,然后不管server端有没有真的接收到,处理的

慢不慢,过的好不好,等等,非常开心的是,这些对wcf来说真的是小菜一碟,只需要一个轻轻松松的”IsOneWay=true“属性就可以了。。。牛逼的要

死。。。还有就是因为是单向的,所以契约方法就没有存在返回值的必要了,我说的对吧。。。嘿嘿~~~

1     [ServiceContract]
2     public interface IHomeService
3     {
4         [OperationContract(IsOneWay = true)]
5         void Update(Student message);
6     }
 1 namespace MyService
 2 {
 3     public class HomeService : IHomeService
 4     {
 5         public void Update(Student message)
 6         {
 7             Console.WriteLine(message.Name);
 8         }
 9     }
10 
11     [DataContract]
12     public class Student
13     {
14         [DataMember]
15         public string Name { get; set; }
16 
17         [DataMember]
18         public int Age { get; set; }
19     }
20 }

为了验证是否真的是单向通讯,我可以用二种方法验证下。

1. wsdl中是否有output这个message

通过下面的图,我想你看的很清楚了,你再也没有找到我们熟悉的“output”这个message,这就说明貌似真的是单向的了,因为wsdl就是web服务的清单。

2. 使用fillder监视一下请求消息

1     class Program
2     {
3         static void Main(string[] args)
4         {
5             HomeServiceClient client = new HomeServiceClient();
6 
7             client.Update(new Student() { Name = "hxc" });
8         }
9     }

正如我在图中说的那样,非常奇怪,我的IsOneWay模式,竟然在http模式下行不通,但是你要记住,http模式天生就是“请求-响应”模式,它完全做不了

单向模式,说明白一点就是:“wcf发现你的bingding不支持单向“的时候,它并不会报错,还是用自己天生的”请求-相应“模式来模拟”单向通信“,这就是你

看到的非常奇怪的Http 202这个http状态码,很多人包括我,都不知道http202 是几个意思,没关系,我们百科一下就好了。。。下面框框的里面的字,

已经说的非常清楚了,感谢感谢。。。

三:“双向“ 模式

这个通讯其实没什么好讲的,也只有tcp模式才会天生支持,而http模式天生就不支持,就像上面一样,如果非要用http来支持“双向通讯“,那又是在

坑"wcf"他爹,这样就会逼着他爹在底层再建立一个“请求-响应“模式来支持所谓的”双向通讯“,而且”双向通讯“这个玩意还不如用两个单向的”请求-响应”模

式或者两个“单向模式”来支持,而且两个”请求-响应“模式比”双向通讯“有更大的灵活性,反正我是对它不感冒,了解一下即可,如果大家比较感兴趣,可以

在wcf官网上看一下:https://msdn.microsoft.com/zh-cn/library/ms735119.aspx。

好了,就说到这里,洗洗睡了,晚安~~~~

posted on 2015-07-20 09:22 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4660521.html

相关文章:

从未在一起更让人遗憾_明明是真爱,却又不能在一起

深爱一个人,若是无缘成为夫妻相偎相依在一起,在分开的很长一段时间里,一定会在深夜难眠,在梦中哭醒,因为你太爱他,太想他。人生那么长,在我们的一生中,总会有一个人,在你…

使用 IntraWeb (8) - 系统模板

我们可以自定义系统错误模板, 编辑 IWError.html 放到模板文件夹后, 它将替换默认的模板.{在主页面, 这是要模拟一个系统错误} procedure TIWForm1.IWButton1Click(Sender: TObject); beginRelease; end;修改前后的 IWError.html 对比:我想办法抠出了 IWError.html 源文件, 从里…

Java中常量定义的几种方式

编程中使用常量的优点: 常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在内存的常…

PCT-36.523

LTE v 36 523-1:Part 1: Protocol conformance specification 定义了每个Case 运行的流程 v 36.523-2:Part 2: Implementation Conformance Statement(ICS) proforma specification. Table 4-1 定义了每个Case的详细背景: 1. 最早那个release 引入的这一c…

测试笔试题之相关概念

1、对手机软件的压力测试通常包括: (1)存储压力 (2)响应能力压力 (3)网络流量压力 (4)边界压力 2、针对手机应用软件的系统测试,我们通常从如下几个角度开展&…

ios 代码设置控件宽高比_用宽高比调整UIImage的大小?

我知道这很老了,但是感谢那篇文章-它使我从尝试使用比例尺重定向到绘制图像。万一对任何人都有利,我做了一个扩展类,我将在这里进行介绍。它允许您调整图像的大小,如下所示:UIImage imgNew img.Fit(40.0f, 40.0f);我不…

jquery入门 修改网页背景颜色

我们在浏览一些网站&#xff0c;尤其是一些小说网站的时候&#xff0c;都会有修改页面背景颜色的地方&#xff0c;这个功能使用jquery很容易实现。 效果图&#xff1a; show you code: <!doctype html> <html> <head> <meta charset"utf-8">…

对于装饰器Decorator的理解

装饰器是用来描述函数&#xff0c;记录日志&#xff0c;提供信息的函数&#xff0c;是一个为了更好的服务主函数的副函数&#xff1a; 详情还需查看&#xff1a;廖雪峰装饰器 关键在于&#xff1a;【import functools是导入functools模块。模块的概念稍候讲解。现在&#xff0c…

UE的注册流程

协议36.508 4.5节 有个表格写的很清楚&#xff1a; Table 4.5.2.3-1: UE registration procedure (state 1 to state 2)

五大主流数据库模型

转载自 五大主流数据库模型 导读&#xff1a;无论是关系型数据库还是非关系型数据库&#xff0c;都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型&#xff0c;让我们来追本溯源&#xff0c;窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型&#…

laytpl语法_layui语法基础

一.按钮区分​ 1.按照主题划分​ 原始&#xff1a;class "layui-btn layui-btn-primary"​ 默认&#xff1a;class "layui-btn"​ 百搭&#xff1a;class "layui-btn layui-btn-normal"​ 暖色&#xff1a;class "layui-btn layui-btn-…

黑马程序员-张老师基础加强3-内省

内省&#xff1a;javaBean JavaBean是一种特殊的Java类&#xff0c;主要用于传递数据信息&#xff0c;这种java类中的方法主要用于访问私有的字段&#xff0c;且方法名符合某种命名规则。 JavaBean的属性是根据其中的setter和getter方法来确定的&#xff0c;而不是根据其中的成…

shell 中长命令的换行处理

考察下面的脚本&#xff1a; emcc -o ./dist/test.html --shell-file ./tmp.html --source-map-base dist -O3 -g4 --source-map-base dist -s MODULARIZE1 -s "EXPORT_NAME\"Test\"" -s USE_SDL2 -s LEGACY_GL_EMULATION1 --pre-js ./pre.js --post-js ./…

golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流

(给Go开发大全加星标)来源&#xff1a;Che Danhttps://medium.com/dche423/micro-in-action-7-cn-ce75d5847ef4【导读】熔断和限流机制对于大流量高并发服务来说不可或缺&#xff0c;尤其在微服务架构下更需要在服务中配置熔断限流机制。对可用性要求高的系统&#xff0c;熔断和…

JasperReport报表设计4

在JRXML模板&#xff08;或JRXML文件&#xff09;中的JasperReport 都是标准的 XML文件&#xff0c;以.JRXML扩展。所有JRXML文件包含标签<jasperReport>&#xff0c;作为根元素。这反过来又包含许多子元素&#xff08;所有这些都是可选的&#xff09;。JasperReport框架…

C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes

因为一些特性复杂&#xff0c;很多时候也用不到一些特性&#xff0c;所以忘记了&#xff0c;算是随笔&#xff0c;也当作一个临时查找的手册。没有什么顺序&#xff0c;很杂。 1.构造函数通过函数重载的机制可以有多个&#xff08;不同的构造函数&#xff0c;参数个数&#xff…

Kibana + Elasticsearch + ik分词的集群搭建

Elasticsearc&#xff1a; Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;并能将这三者结合起来。Elasticsearch 基于 Lucene 开发&#xff0c;是 Lucene 的封装&#xff0c;提供了 REST API 的操作接口&#xff0c;开…

VOLTE parameter in Attach Request/Accept message

VOLTE字面上是:Voice over LTE. 但是人们所提到的VOLTE,实际上是指“Voice over LTE utilizing IMS” Attach Request/Accept消息中包含了VOLTE相关的参数。 1. Attach request 参考: 3GPP 24.301 – 8.2.4 关注红框内的3个参数&#xff1a; SrvccToGeranOrUtranCapability 参…

[YY题]HDOJ5288 OO’s Sequence

题意&#xff1a;求这个式子 $\sum \limits_{i1}^{n} \sum \limits_{j1}^{m} f(i, j) mod (10^9 7)$ 的值 就是对每个区间[i, j]枚举区间中的每个数$a_i$到$a_j$, 判断这个$a$是否对[i, j]这个区间内所有数取模都不等于0&#xff0c; 若是&#xff0c;则这个区间满足条件 问有…

python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据

在使用python读取Excel文件中的时间格式&#xff0c;碰到的时间格式转换问题&#xff1a;读取这样的表格&#xff1a;输出这样的数据结果&#xff1a;然而这样的结果却不是我们想要的&#xff0c;我们需要的是这样的结果:1、安装python官方库---datetime引入datetime库import d…

操作无法完成后台打印程序无法运行

同事反映原共享的打印机无法打印。我删除重新添加时系统提示 操作无法完成后台打印程序无法运行。于是我打开服务找到print spooler服务进程设置自动开启后重新添加问题依旧。在网上查到的方法是病毒清了后你的 SPOOLSV.EXE文件就没有了,且在服务里你的后台打印print spooler也…

NodeJS 模块

cheerio 可以用jQuery操作DOM&#xff08;服务器端&#xff09; 转载于:https://www.cnblogs.com/tujw/p/11054252.html

Linux下netstat命令详解&&netstat -anp | grep 讲解

Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

Linux命令——根据端口号查进程

查出的数据第二列(16615)是elasticsearch的进程号。通常我们会根据端口号查进程号,或者通过进程号查端口号。linux环境下,我们常常会查询进程号pid。最常用ps -ef |grep xx。根据端口port查进程。根据端口port查进程。根据进程pid查端口。根据进程pid查端口。

RRC Connection Reconfiguration

RRC Connection Reconfiguration Dir: E-UTRAN -> UE SRB: SRB1 这个消息用来修改RRC连接&#xff0c;主要目的&#xff1a; 1. To establish/modify/release Radio Bearers; 无线承载 2. To perform Handover; 切换 3. To setup/modify/release Measurements; 测量…

H - Parity game-poj1733(需要离散化)

题意&#xff1a;给一个序列这个序列都是由0和1组成&#xff0c;现在随意拿出来一个序列&#xff0c;然后说出他的和是奇数还是偶数&#xff0c;因为有可能存在假话&#xff0c;让你判断前多少条没有假话&#xff0c;也就是查找第一个假话的位置-1//这道题很像D题&#xff0c;都…

redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制

本文主要介绍了 Redis 持久化的两种机制&#xff1a;RDB 和 AOF&#xff0c;以及键过期的策略&#xff1a;惰性删除和定期删除&#xff0c;还有 RDB、AOF 和复制功能对过期键的处理。RDBRDB 是 Redis 持久化的第一种方式。有两个 Redis 命令可以用于生成 RDB 文件&#xff0c;一…

ASP.NET MVC 5 - 视图

2019独角兽企业重金招聘Python工程师标准>>> 在本节中&#xff0c;你要去修改HelloWorldController类&#xff0c;使用视图模板文件&#xff0c;在干净利索地封装的过程中&#xff1a;客户端浏览器生成HTML。 您将创建一个视图模板文件&#xff0c;其中使用了ASP.NE…

java内存泄漏问题排查

背景&#xff1a;程序部署在客户机器上&#xff0c;不定期异常崩溃&#xff0c;且无日错误异常日志记录。 day1&#xff1a;初步排查是内存问题导致的&#xff0c;考虑使用分析工具记录分析。另外代码review仔细排查&#xff0c;怀疑有可能跟大量网络socket没有释放有关。 程序…