WCF之消息模式

  • 请求/响应:所有操作的默认行为,在WSDL中表现为Input/Output元素.

  • One_Way.
    • 在WSDL中只有Input,没有回应(Output),所以没有异常报告。

    • 单向操作只会在发出调用的瞬间阻塞客户端,但是如果发出了多个单向调用,WCF会把这些调用放入队列,由于队列是有限容量的,过多数量的调用会被阻塞,直到有的请求出列,然后调用入列,才会解除客户端的阻塞。

    • 当要保证消息确实到达时,使用可靠性消息/MSMQ来暂时/长期保证。

    • 其无法维持客户端状态,所以应该是终止会话前的最后一个操作.

    • 如果服务器段信道发生问题,客户端只有在下次请求时才能发现。

    • 用途.
      • 不需要报告成功与否的操作(日志,事件发布);

      • 客户端通过另一个操作来获得前一次操作结果,即轮询.

      • 用于密集型操作,每次请求得到一定的结果;

      • 双向通信,用于非密集型,只有一个最终结果,服务端完成后主动通知客户端,解放客户端。(方法的表现形式为返回类型为void,参数不能有ref,out).

  • 双向.
    • 操作可以是请求/响应或者One_way。

    • 在WSDL中只有回调契约上有Output。

    • CallBack的实现代码在客户端,由服务器端调用CallBack,且该调用的方法必须为One_way或者可重入的.

    • 客户端端点:Duplex协议,提供好了BackChannel;而WSDualHttp要设置ClientBaseAdd带外调用:在服务器端,请求要被排队,然后按照先来先服务被处理,而带外处理,就是另建一个优先级较高的队列,让后来的请求有可能被先掉用.

  • 回调
    • BasicHttpBinding或WSHttpBinding绑定并不支持回调.

    • 如果使用了回调,则客户端生成的代理类必须继承自DuplexClientBase<T>代理类.

    • 服务对回调的调用可能死锁,解决办法: 1)将服务配置为可以多线程访问,但会增加开发的负担;2)在客户端的回调实现类的ConcurrencyMode =
      ConcurrencyMode.Reentrant.3)将回调设置为单向.

    • 在使用回调对象时,需要考虑到客户端代理可能关闭,此时的调用,得到一个ObjectDisposedException. 因此,对于客户端而言,当它不再需要接收回调或者客户端应用程序已经关闭时,最好能够通知服务.所以,
      为服务契约增加两个操作Connect()与Disconnect().

    • 由于使用WSDualHttpBinding绑定执行回调时,需要开通两个HTTP通道,一个用于服务,一个用于回调。通常,WCF为回调通道选择了默认的80端口,但如果客户端运行了IIS,则可能会占用80端口,就会导致端口的冲突。实际上,我们可以为回调通道指定任何可用的端口,例如,我们可以通过配置文件为客户端指定基地址。然而,我们指定的端口仍然可能会被占用,只是这种占用的可能性比80端口小。为了避免潜在的端口冲突,同时简化程序员的工作,最好的办法是自动分配一个可用的端口.

  • 上下文重入(ConcurrencyMode)
    • 当对独占域拥有访问权限的线程A访问域外的方法(回调对象)时,有一个线程B要访问该独占域(服务对象),A会释放该域的锁以让B进入,直到B完成并释放锁后,A将重新进入该域.

    • 在客户端请求时,把自己的上下文在请求的同时发送给服务器端。服务器端处理完后,把这个上下文又发回给客户端。此上下文为C/S间共有.

    • 不可重入:客户端和服务器端互相等待上下文环境的释放。死锁(single).

    • 单线程可重入:对临界区资源很好的保护。(Reentrant).

    • 完全可重入:允许多线程对当前上下文进行处理。(Multiple).需要对临界资源进行处理。在GUI中,回调函数运行的线程必须为调用请求的线程.

  • 大消息.

    • 为了防止DOS,有一个消息的最大配额。

    • 1)MTOM:降低二进制传输的开销。方法:删除过多的无用信息,Base64编码:把2进制的8B一组改为6B一组,使数据量增大8/6倍。SOAP消息以MIME的文档多部分相关类型发送。使用时仅仅需要对配置文件进行修改。

    • 2)流传输:MTOM中整个消息被加载到内存里,开销比较大,使用流降低它,但是会损失某些特性(可靠性消息与安全性)。在客户端读取返回和服务端读取进入时要手动关闭流。而对于客户端发送和服务器返回时WCF默认自动关闭.

  • 分步操作
    • 当服务契约需要指定执行顺序时.

    • 使用操作契约的IsInitiating(默认=true)和IsTerminating(=false)属性实现.

    • IsInitiating=true的操作不一定是启动会话的第一个操作,相同设置的其它方法在被调用后,会启动一个会话,而该调用被加入该会话中.但是调用IsTerminating=true的操作必为关闭会话的操作,之后,不能调用服务的任何方法,除非再创建一个代理对象. IsTerminating=true的操作也可以为IsInitiating=true,启调用开始时开启会话,但是结束时会结束会话.

WCF之消息模式,布布扣,bubuko.com

时间: 2024-10-16 05:51:12

WCF之消息模式的相关文章

【WCF全析(一)】--服务协定及消息模式

上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软战略之中,以后的.NET Developer就可以使用Vs开发Linux应用了,Developer又有了新的选择,从微软的战略转型也可以看出互联网已经步入到了新的模式,以后不再是PC的时代,移动互联和云时代已经到来. 最近做项目时使用到了WCF,项目把数据层和程序层进行了分割,相互之间的数据传输使用

【架构之路之WCF全析(一)】--服务协定及消息模式

上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软战略之中,以后的.NET Developer就可以使用Vs开发Linux应用了,Developer又有了新的选择,从微软的战略转型也可以看出互联网已经步入到了新的模式,以后不再是PC的时代,移动互联和云时代已经到来. 最近做项目时使用到了WCF,项目把数据层和程序层进行了分割,相互之间的数据传输使用

关于 ActiveMQ 的消息模式

1.JMS Queue 执行 load balancer语义:一条消息仅能被一个 consumer(消费者) 收到.如果在 message 发送的时候没有可用的consumer,那么它将被保存一直到能处理该 message 的 consumer 可用.如果一个 consumer 收到一条 message 后却不响应它,那么这条消息将被转到另一个consumer 那儿.一个 Queue 可以有很多 consumer,并且在多个可用的 consumer中负载均衡. 点对点消息传递域的特点如下:• 

重温WCF之消息拦截与篡改(八)

我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借助其他工具来抓取数据包来查看.那,有没有办法让程序自己输出相应的SOAP信息呢? 要对SOAP消息进行拦截和修改,我们需要实现两个接口,它们都位于System.ServiceModel.Dispatcher (程序集System.ServiceModel).下面分别价绍. 接口一:IClientMe

重温WCF之消息契约(MessageContract)(六)

对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息.比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体.比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式.文件大小等.一般的做法是将传输文件内容的流作为SOA

【转】WCF入门教程五[WCF的通信模式]

一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序,如下图所示(图中的粗红线在此时代表顺序并不代表调用): 请求与答复模式为WCF的默认模式,如下代码所示: 1 [OperationContract] 2 string ShowName(string name); 即使返回值是void 也属于请求与答复模式. 缺点:

WCF系列之WCF的通信模式

一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序,如下图所示(图中的粗红线在此时代表顺序并不代表调用): 请求与答复模式为WCF的默认模式,如下代码所示: [OperationContract] string ShowName(string name); 即使返回值是void 也属于请求与答复模式. 缺点:如果用W

ActiveMQ发布-订阅消息模式

一.订阅杂志我们很多人都订过杂志,其过程很简单.只要告诉邮局我们所要订的杂志名.投递的地址,付了钱就OK.出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中.这样我们就可以看到每一期精彩的杂志了. 仔细思考一下订杂志的过程,我们会发现这样几个特点:1.消费者订杂志不需要直接找出版社:2.出版社只需要把杂志交给邮局:3.邮局将杂志送达消费者.邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递. 二. 发布-订阅消息模

使用wcf的双工模式做的一个控制台聊天app

//wcf 服务 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace WcfService1 { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文