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

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

一:“请求-响应“模式

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

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

1: 同步方式

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

2: 异步方式

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

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

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

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

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

二:“单向“模式

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

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

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

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

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

     [ServiceContract]
public interface IHomeService
{
[OperationContract(IsOneWay = true)]
void Update(Student message);
}
 namespace MyService
{
public class HomeService : IHomeService
{
public void Update(Student message)
{
Console.WriteLine(message.Name);
}
} [DataContract]
public class Student
{
[DataMember]
public string Name { get; set; } [DataMember]
public int Age { get; set; }
}
}

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

1. wsdl中是否有output这个message

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

  

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

     class Program
{
static void Main(string[] args)
{
HomeServiceClient client = new HomeServiceClient(); client.Update(new Student() { Name = "hxc" });
}
}

  

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

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

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

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

三:“双向“ 模式

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

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

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

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

 

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

[转]十五天精通WCF——第六天 你必须要了解的3种通信模式的更多相关文章

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

    wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...

  2. 十五天精通WCF——第四天 你一定要明白的通信单元Message

    转眼你已经学了三天的wcf了,是不是很好奇wcf在传输层上面到底传递的是个什么鸟毛东西呢???应该有人知道是soap,那soap这叼毛长得是什么 样呢?这一篇我们来揭开答案... 一:soap到底长成 ...

  3. [转]十五天精通WCF——第四天 你一定要明白的通信单元Message

    转眼你已经学了三天的wcf了,是不是很好奇wcf在传输层上面到底传递的是个什么鸟毛东西呢???应该有人知道是soap,那soap这叼毛长得是什么 样呢?这一篇我们来揭开答案... 一:soap到底长成 ...

  4. 十五天精通WCF——第一天 三种Binding让你KO80%的业务

    转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...

  5. 十五天精通WCF——第十四天 一起聊聊FaultException

     我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛, 这时候clr会把这个未处理的异常抛给iis并且包装成http500的错 ...

  6. [转]十五天精通WCF——第十四天 一起聊聊FaultException

     我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛, 这时候clr会把这个未处理的异常抛给iis并且包装成http500的错 ...

  7. [转]十五天精通WCF——第一天 三种Binding让你KO80%的业务

    转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...

  8. 十五天精通WCF——终结篇 那些你需要注意的坑

    终于一路走来,到了本系列的最后一篇了,这一篇也没什么好说的,整体知识框架已经在前面的系列文章中讲完了,wcf的配置众多,如果 不加一些指定配置,你可能会遇到一些灾难性的后果,快来一睹为快吧. 一: 第 ...

  9. 十五天精通WCF——第十三天 用WCF来玩Rest

    在我们玩wcf的时候,都会潜意识的觉得wcf就是通过soap协议交换消息的,并且可以在basic,tcp,msmq等等绑定中任意切换, 牛逼的一塌糊涂,但是呢,如果说哪一天wcf不再使用soap协议, ...

随机推荐

  1. Django day27 认证组件,权限组件()

    一:认证组件 1.写一个类 class LoginAuth(): # 函数名一定要叫authenticate,接收必须两个参数,第二个参数是request对象 def authenticate(sel ...

  2. Akka源码分析-深入ActorRef&ActorPath

    上一节我们深入讨论了ActorRef等相关的概念及其关系,但ActorRef和ActorPath的关系还需要再加以分析说明.其实还是官网说的比较清楚. “A path in an actor syst ...

  3. poi导出excel改变标题颜色

    在excelutil类里面添加 public class ExcelUtil { public static Workbook fillExcelData(ResultSet rs, Workbook ...

  4. 解决Oracle 本地可以连接,远程不能连接问题

    一.问题描述: 1.telnet 2.输入命令 lsnrctl status 远程访问不到的原因为:监听指向的是localhost,而不是你本机的远程访问ip地址,因此需要将监听的指向修改为你本机的远 ...

  5. BAT文件如何注释

    1.BAT文件中如何注释: 1.:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符) 2.rem 注释内容(不能出现重定向符号和管道符号) 3.echo 注释内容(不能出现重定向符号和管道符 ...

  6. html5——表单

    type类型 email //输入email格式 tel //手机号码 url //只能输入url格式 number //只能输入数字 search //搜索框 range //范围 滑动条 colo ...

  7. Android中ViewPager动态创建的ImageView铺满屏幕

    ImageView imageView=new ImageView(context); imageView.setScaleType(ScaleType.FIT_XY);//铺满屏幕

  8. Hibernate自动事务揪出的编码不规范

    最近重构的项目(Java初学中),Service层一个获取通知记录报错: org.springframework.dao.InvalidDataAccessResourceUsageException ...

  9. C# 获得固定年月日

    /// <summary> /// 获得固定年月日,时和分不固定 : 2019-01-01 00:00:00 /// </summary> /// <returns> ...

  10. 8 switch case

    当一个case成立,从这个case向后穿透所有case,即使后面的case条件不成立 包括default,直到程序结束或者遇到break程序才结束. 1.case是常量,且不能重复 2.表达式可以是b ...