WCF 双工通信
注释:本学习是参考Artech大神的资料:
在这里我就不介绍双工通信的概念了,我写博客的目的是检测自己掌握情况,看我wcf通信后,觉得纸上得来终觉浅,绝知此事要躬行。
我使用的是Vs2013,。
一、设计总体架构,仍然采用契约(contracts)、服务(service)hosting(宿主) client(客户端),不是比较程序抄写,自己按照理解写出来的,发现许多意想不到的错误。
二、菜鸟的我再次卖弄下风骚,展示下自己的小demo。
当我运行hosting程序时,出现bug,hosting code没有几行,怎么会出现bug呢,仔细看来下错误提示。
看到错误提示中:未找到配置文件中与服务名称匹配的元素。于是我打开app.config查看,我写了配置了啊
如:<service name="CalculatorService">
,这里应该是namespace+classname,所以正确的name:<service name="Company.service.CalculatorService">,修改后:
果然是这个原因啊。
三、hosting 宿主进程启动成功,再启动client,如果能显示预先设置的结果,就说明基本上OK了。
这个错误的出现让我一头雾水,这是神马鬼,我有再次阅读大神的文章,发现其中有这么一句话:
1.请求过程中的回调
这是一种比较典型的双工消息交换模式的表现形式,客户端在进行服务调用的时候,附加上一个回调对象;服务在对处理该处理中,通过客户端附加的回调对象(实际上是调用回调服务的代理对象)回调客户端的操作(该操作在客户端执行)。整个消息交换的过程实际上由两个基本的消息交换构成,其一是客户端正常的服务请求,其二则是服务端对客户端的回调。两者可以采用请求-回复模式,也可以采用单向(One-way)的MEP进行消息交换。图1描述了这样的过程,服务调用和回调都采用请求-回复MEP。
继续往下面读发现:
客户端调用CalculatorService正常的服务调用,那么在服务执行过程中借助于客户端在服务调用时提供的回调对象对客户端的操作进行回调,从本质上讲是另外一种形式的服务调用。WCF采用基于服务契约的调用形式,客户端正常的服务调用需要服务契约,同理服务端回调客户端依然需要通过描述回调操作的服务契约,我们把这种服务契约称为回调契约。回调契约的类型通过ServiceContractAttribute特性的CallbackContract属性进行指定。
原来在添加上还需要:
四、再次运行Client程序:
终于成功了。