首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我的WCF之旅(3):在WCF中实现双工通信

一、两种典型的双工MEP 1.请求过程中的回调 这是一种比较典型的双工消息交换模式的表现形式,客户端在进行服务调用的时候,附加上一个回调对象;服务在对处理该处理中,通过客户端附加的回调对象(实际上是调用回调服务的代理对象...结果显示是通过回调的方式实现的,所以需要借助于客户端提供的回调对象(该对象在客户端调用CalculatorService的时候指定,在介绍客户端代码的实现的时候会讲到)。...在客户端程序为回调契约提供实现,在下面的代码中CalculateCallback实现了回调契约ICallback,在DisplayResult方法中对运算结果进行输出。...WSDualHttpBinding通过创建两个单项信道的方式提供双工通信的实现。 对于一个双工通信的WCF服务来说,回调过程本质上也是一种服务调用,是对寄宿于客户端的回调服务的调用。...为了保证回调的正常运行,在客户端创建通道的时候(比如上面的代码通过DuplexChannelFactory的CreateChannel方法的时候),会进行回调服务的寄宿,并指定回调服务的监听地址。

1.1K100

Mono 3.0.2 基于双工通信的WCF应用 Demo

客户端调用CalculatorService正常的服务调用,那么在服务执行过程中借助于客户端在服务调用时提供的回调对象对客户端的操作进行回调,从本质上讲是另外一种形式的服务调用。...WCF采用基于服务契约的调用形式,客户端正常的服务调用需要服务契约,同理服务端回调客户端依然需要通过描述回调操作的服务契约,我们把这种服务契约称为回调契约。...结果显示是通过回调的方式实现的,所以需要借助于客户端提供的回调对象(该对象在客户端调用CalculatorService的时候指定,在介绍客户端代码的实现的时候会讲到)。...WSDualHttpBinding实际上创建了两个通道,一个用于客户端向服务端的通信,而另一个则用于服务端到客户端的通信,从而间接地提供了双工通信的实现。...具体可以参看 WCF置于Mono下遇到的一些问题 在MONO下实现WCF所遇到的问题 步骤四:实现回调契约 在客户端程序为回调契约提供实现,在下面的代码中CalculateCallback实现了回调契约

77960
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    WCF如何克服HTTP传输协议的局限提供对不同消息传输模式的实现

    二、 HTTP如何实现Duplex消息交换模式? ? 如果采用Duplex的消息交换模式,在进行消息交换过程中,任何一方都可以向对方发送消息,如右图所示。双工通信使服务端回调客户端操作成为可能。...WCF通过WsDualHttpBinding实现了基于HTTP协议的双工通信,实际上是采用了两个HTTP通道实现的。...Duplex消息交换模式实际上是由两个简单模式(One-Way或者Request/Reply)组合而成的。WCF通过双工通信实现了服务端对客户端的回调。...假设客户端采用One-way的方式调用服务,而服务端同样以One-Way的方式对客户端进行回调。在这个过程中,正常的服务调用和回调实现上是在不同的HTTP通道中进行的。...从消息交换的角度讲,客户端调用服务端和服务端对客户端进行回调,本质上是一样的。所以,从HTTP传输层看,真正的消息交换方式如左图所示。

    1K70

    WCF中的Binding模型之二: 信道与信道栈(Channel and Channel Stack)

    通过注册相应的事件,可以在某个状态转换环节中注入你需要的处理操作。 方法:定义了三种类型的操作:开启(open)、关闭(close)、中止(abort)。...图1 CommunicationObject继承关系 由于WCF往往需要跨域网络进行服务的访问,较之一般的方法调用,服务访问的所花的时间往往较长,所以对超时的处理显得异常重要。...比如我们可以通过该方法,指定相应的范型类型,确定信道是否支持某种Channel Shape(关于channel shape将在接下来的部分中进行介绍),消息版本和安全模式等等。...图4双工消息交换模式 双工通信使服务端回调客户端成为可能:客户端在调用服务的时候,指定一个回调对象,服务端操作执行过程中可以通过回调对象回调客户端的操作。比较典型双工通信是我们熟悉的订阅/发布模式。...WCF通过WsDualHttpBinding实现了基于HTTP协议的双工通信,实际上是采用了两个HTTP通道实现的。 3.2.

    44620

    菜菜从零学习WCF二(设计和实现服务协定)

    --若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的方法声明 创建数据协定   面向服务的应用程序(例如Windows Commnuication Foundation(WCF)应用程序...,即表示客户端调用的该方法为单向模式,IsOneWay在默认的情况下值为false的。   ...而现在的单向模式,虽然在服务实现添加暂停10秒的时间,但是客户端只要调用该服务方法后,不会有服务端的响应,可以继续请求或操作客户端其他的操作。...WSDualHttpBinding实际上创建了两个通道,一个用于客户端向服务端的通信,而另一个则用于服务端到客户端的通信,从而间接地提供了双工通信的实现。...然后我们实现在上面服务端建立的客户端回调接口 ?

    88120

    2019-1-25-wcf入门(5)

    ,同时服务端也可以向客户端发送消息 双工模式实际上是由客户端->服务端的服务协议和服务端->客户端的回调协议组成。...如图所示在创建双工模式的协定时,我们需要定义两个接口IDuplex用于客户端向服务端发送消息(或者称之为调用服务端方法),IDuplexCallback用于服务端向客户端发送消息(或者称之为调用客户端方法...在服务端实现上我们额外通过OperationContext获取定义为IDuplexCallback接口的通道。 通过这个通道(客户端的透明代理),在服务端就可以调用客户端的方法 ?...在客户端的使用时,我们需要将回调接口的实现注入到InstanceContext中,并且传入客户端的构造函数 ? 运行程序,我们发现,客户端向服务端发送了消息,服务端也向客户端发送了消息。...实现了双向的通信 小结 我们研究了WCF服务的双工模式,其特点有 可以实现双向通信 协定的每个方法都可以通过OperationContract指定为单向或者请求答复模式 双工协定要求Binding支持双工模式

    32320

    2019-1-31-wcf入门(11)

    这边博客介绍如何利用我们现有知识针对OneWay的情形回馈异常 回馈单向模式异常 为什么单向模式不能回馈异常 我们在2019-1-25-wcf入门(4) - huangtengxiao博客中说过,单向模式在调用服务端方法时会立刻返回...那么当我们抛出异常时,服务端已经不知道该把异常信息回复给谁了。 所以对于单向模式,错误协定无法回馈错误信息。 如何回馈单向模式异常 还记得我们解决单向模式返回值问题的方案么?...没错就是2019-1-25-wcf入门(5) - huangtengxiao中提到的双工模式 说白了,就是添加一个传递异常信息的回调接口,在发生异常时向这个回调接口发送异常信息 ?...实现上catch所有异常,并将异常信息包装成ServiceFault发送给客户端 ? 最后我们在客户端输出异常信息 ? 结果如图所示,我们成功获得服务端异常信息 ?...,其特点有 利用双工在业务层实现 有双工模式的限制 能处理单向操作 参考链接: 如何:在服务协定中声明错误 - Microsoft Docs 定义和指定错误 - Microsoft Docs 在协定和服务中指定和处理错误

    32020

    使命必达: 深入剖析WCF的可靠会话(上)

    在这里我们可以通过简单地几句话对可靠会话实现机制进行简单的介绍。 WCF的可靠会话是建立在客户端和服务端之间,确保消息可靠传输的上下文,相当于WS-RM中序列的概念。...消息被接收端成功接收之后,会向发送端发送一个确认消息表示具有某个序号的消息已经成功接收。如果需要保障有序交付,接收端在交付之前需要确定先于该消息发送的所有消息是否成功交付。...AcknowledgementInterval:如果消息的发送方和接收方通过双工通道连接,接收方能够随时向接收方发送确认。在这种情况下,为了降低网络流量,WCF采用批量确认的机制。...由于基于请求/回复模式的HTTP传输不能够独立提供对双工通信的支持,WCF采用的是双通道的方式。...也就是说,对于通过WSDualHttpBinding创建的所谓的双工通道是由两个方向相反的HTTP连接组成的,WCF采用可靠会话机制提供对这两个连接的匹配。

    73860

    路由服务

    我们知道,针对某个服务操作的调用可以通过三种不同的消息交换模式来实现,即数据报/单向(Datagram/One-Way)、请求/回复(Request/Reply)和双工(Duplex)。...而基于双工消息交换模式的IDuplexSessionRouter,除了也将会话模式设置为SessionMode.Required之外,还定义了回调的类型IDuplexRouterCallback。...如果忽略服务端对客户端的回调,单独来看双工模式下服务调用采用的消息交换模式,它可以是单向的,也可以是基于请求/回复模式的。...实际上,在这种情况下,不论是针对服务端回调客户端的消息,还是最终调用完成后的回复消息,都是通过路由服务对客户端的回调来实现消息的路由的。...具体的实现是这样的:路由服务维护者一个叫做筛选器表(FilterTable)的数据结构,该表的每一个元素代表一个消息筛选器和一个客户端终结点之间的映射关系,而该终结点直接指向某个具体的目标服务。

    59070

    silverlight:wcf双工通讯学习笔记

    一直觉得SL中的wcf双工通讯方式有点鸡肋,如果是以http方式实现则效率太低,如果用SL4中的tcp方式实现,又跟socket太雷同,所以一直没去研究,不过这东西在对性能要求不高时(比如在网页上每5分钟更新一次天气预报.../股票信息),实现起来还是蛮方便的. wcf双工通讯与传统的wcf相比,最大的区别就是:传统的wcf通常都是客户端去调服务,即客户端从服务端上“拉”信息,而双工通讯除了允许客户端从服务端"拉"信息外,服务端还能主动向客户端...当然这种实现是有性能消耗的,服务端将保存一条"回调通道"以便能利用该通道把信息推到客户端,而客户端也要有相应的回调函数来处理--有点类似"ajax中的长链接"以及"服务器推"技术 sl3的官方文档http...://msdn.microsoft.com/zh-cn/library/dd470106(VS.95).aspx中有一个客户端把订单发送到服务端,然后由服务端处理后,再把结果回推到客户端的例子,不过sdk...,如果出现无法访问客户端,请检查服务端下有无策略文件clientaccesspolicy.xml,参考内容如下: <?

    54050

    WCF并发(Concurrency)的本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求

    具体来讲,当WCF服务端框架接收到多个针对相同InstanceContext的请求时,会先确定该InstanceContext是否可用(是否正在处理之前的服务调用请求),如何可用,则将接收到的第一个请求分发给它...如果一个请求在队列中等待的时间过长,超过了设置好的服务调用的超时实现,客户端会跑出TimeoutException异常; Reentrant:该模式和Single一样,InstanceContext...我们知道InstanceContext不仅仅是封装真正服务实例的容器,当我们通过双向通信的机制从服务端回调客户端操作时,真正执行回调操作的回调对象也是封装在InstanceContext中。...在双向通信的场景中,如果多个服务端或者同一个客户端的多个并发的服务调用操作所指定的回调实例上下文(即封装回调操作的InstanceContext对象),就可能出现针对同一个InstanceContext...WCF采用与正常服务调用相同的机制来处理并发回调,实际上WCF采用几乎一样的机制来实现正常的服务调用和回调。

    1.1K70

    快速入门系列--WCF--01基础概念

    此外,除了使用绝对地址来指定某个服务的终结点地址外,还可以通过"基地址+相对地址"的方式,其配置形式如下,需要注意一种类型的协议只能有一个基地址,并且当一个服务实现类同时实现了多个服务接口时,该终结点地址可以共享...如果说契约是客户端和服务端达成的某种共识,是双边协议,而行为则是客户端或服务端在本地实现某个功能的一种方式,是一种单边行为。...等;ProtectionLevel表示消息的保护级别;CallbackContract在双工通信时指定回调操作的接口类型。..."/> 70 71 当调用以上示例的服务时,会抛出一个关于死锁的异常,原因是其在并发场景下会造成回调死锁的情况,可以通过将请求或回调方法设置为单向即可...这3中场景包括:异步的信道调用,客户端可以通过代理对象异步的调用信道;单向消息交换,客户端的信道通过单向的消息交换模式向服务端发送消息,发送立刻返回;异步服务实现,服务端在具体实现服务操作时,采用异步调用的方式

    1.1K100

    WCF Service Hosting的线程关联性Mono实现比.NET统一?

    Mono 3.0.2 基于双工通信的WCF应用 Demo 的讨论中 深蓝医生 提到了一个问题: 楼主,找了几天,终于明白我的程序错误在哪里了,在服务契约上加入下面的接口方法: [OperationContract...] double Sub(double x, double y); 这样客户端调用的时候,能够直接得到Sub方法的返回值,但同样功能的服务在mono 上面运行的时候,出现下面的错误...双工服务中,方法不支持 IsOneWay = false 的情况,也就是服务的双向调用。...这样的方法在Windows 下运行良好,把它放到了Mono环境下不正常了。有时候需要“同步”的回调,这也是合理的需求呀,我把他这个方法进去进行测试: ?...客户端的调用代码: ? 然后放到Mono上去运行,成功了。 ?

    54460

    WCF中的Binding模型之六(完结篇):从绑定元素认识系统预定义绑定

    为此我们我们写了一个简单的方法,用于列出一个具体的绑定对象所有的绑定元素,在介绍一个个具体的系统绑定中,我会使用该方法: 1: static void ListAllBindingElements...还需要基于多次服务访问的事务(将多次服务调用纳入同一个事务之中);不仅仅需要基于单一平台的事务支持,还需要跨平台的事务(比如将基于.NET平台的WCF服务调用和基于J2EE平台的Web服务调用纳入同一个事务中...而对于双工通信来说,由于客户端满足这样要求,所以从服务端回调客户端的传输安全是无法确保的。...这些属性都决定了这三种绑定具有较好的互操作性,也就是说,对于此三种绑定的应用并不限于对于基于.NET平台应用的交互,如果通过这些绑定寄宿我们的服务,其他平台的客户端可以调用我们的服务,同理我们也可以利用基于这些绑定的客户端访问其他非...:仅仅支持传输模式的安全(实际上消息安全模式在IPC场景下已经没有意义);客户端凭证之限于Windows。

    930100

    使命必达: 深入剖析WCF的可靠会话(下)

    上面一部分我们站在信道层的角度剖析了WCF为了实现可靠会话在信道层进行的一系列消息交换,或者说客户端和服务端的RS信道为了实现可靠消息传输所进行一轮又一轮的握手。...在进行服务调用的时候,即使采用的单向消息交换模式,发送应用消息的请求依然会接收到一个包含SOAP消息的HTTP回复。服务端通过将确认消息方法每一个HTTP回复之中。...除了上述的两点不同之前,还有一个不一样的地方:客户端在发送RM序列终止请求之前会发送一个携带Sequence报头的空消息,而对于包含在该空消息中的Sequence报头,除了包含消息序号之外,还具有一个额外的...但是,对于WSDualHttpBinding创建的双工信道,情况就不一样了。双工通道是客户端和服务端成为了对等终结点,无论是服务端还是客户端,对于对方来说都是可寻址的(Addressable)。...服务端可以在任何时候向客户端发起请求,将相应的信息通过HTTP请求的方式发送给客户端。 双工通道成就了可靠会话的“批量确认”机制。

    585100

    2019-1-27-wcf入门(6)

    在服务实现上,对于SayHello方法,传入客户端的name并且保存为字段。...这个是设置整个会话的生命周期内,只使用服务类的单个实例。实例化的具体内容会在后续博客中介绍 ? 我们看下客户端的调用,依次调用会话启动方法,其余方法,会话终止方法。 ?...我们可以看到所有的回复都带上了客户端在会话启动方法传入的name 会话的问题 在WCF中客户端是通过一个通道创建了服务的透明代理。而当会话终止时,相应的通信通道也会关闭。...这时候我们如果继续在已经关闭的通道上通信就会引发异常。 ? ? 当然如下所示的尝试在这个通过再次建立会话也是不可以的。 ?...小结 我们研究了WCF服务的会话,其特点有 可以实现一组消息相互关联 需要显示启动和终止 终止后通过会关闭,再次通信需要重新实例化客户端 参考链接: 如何:创建要求会话的服务 - Microsoft Docs

    50920

    ConcurrencyMode.Multiple 模式下的WCF服务就一定是并发执行的吗:探讨同步上下文对并发的影响

    在《上篇》中,我通过一个具体的实例演示了WCF服务宿主的同步上下文对并发的影响,并简单地介绍了同步上下文是什么东东,以及同步上下文在多线程中的应用。...也就是说,在某个时刻,仅仅只有针对某个服务调用的服务操作被执行,其他的调用请求都将被放入一个等待队列中。...的并发请求操作的执行机制有了一个大概的了解,接下来我们对该机制在WCF并发框架体系下的真正实现进行更加深层次的探讨。...在回调场景中,客户端开启服务代理并指定回调实例上下文对象进行服务调用的时候,如果当前线程存在同步上下文,那么当服务端进行回调的时候,回调操作会自动被封送到该同步上下文中执行。...在客户端,我们也可以采用特性标注的方式解除掉回调操作与客户端程序之间的线程关联性,而这个特性就是我们之前提到过的CallbackBehaviorAttribute。

    948110

    WCF系列教程之WCF服务协定

    (2)、客户端可以通过它来于服务端进行通信 3、定义完了服务协定层(服务接口层),就可以实现当前协定层,实现服务协定层后并将其与WCF 绑定和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用...,如URL 在WCF中,WSDL是元数据交换的一种数据格式,通过它的描述,WCF服务程序间就可以进行相应的数据交换,甚至是跨平台的应用间也可以进行数据交换。...具体请参考:WCF系列教程之WCF中的会话. (6)、CallbackContract:获取或设置当协定为双工协定时的回调协定类型。...在 CallbackContract 属性中指定一个接口,该属性表示双向(双工)消息交换中所需的反向协定。...这使得客户端应用程序能够侦听入站操作调用,该调用可以由服务器端服务应用程序独立于客户端活动进行发送。 具有单向操作的回调协定表示从客户端可以处理的服务发出的调用。

    86470

    WCF学习笔记 3

    WCF通信模式 请求与响应模式 请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应。这也意味着在接收到服务的响应以前,客户端不会继续执行操作。 请求/响应模式是默认的消息模式。...若要设计双工协定,还必须设计回调协定,并将该回调协定的类型分配给标记服务协定的ServiceContractAttribute 属性(attribute)的CallbackContract 属性(property...若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的方法声明 [ServiceContract(SessionMode=SessionMode.Required, CallbackContract...异步调用模式 异步与否由客户端来决定,在设计之初,不应该去考虑服务的调用者调用的方式。...WCF可以由二种方式生成客户端异步调用的代理类: 1、用svcutil生成异步功能的代理类 2、修改接口定义异步方法 我们用svcutil来生成客户端代理代码的时候,只需添加 /async便可以生成有异步功能的代理类了

    36210
    领券