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

寻求WCF双工"TwoWay"订阅+回调示例

WCF(Windows Communication Foundation)是微软提供的一种用于构建分布式应用程序的框架。它支持多种通信协议和编码方式,并提供了灵活的消息传递模型。在WCF中,双工通信是一种允许客户端和服务端之间进行双向通信的方式。

在WCF中,双工通信可以通过使用"TwoWay"订阅+回调模式来实现。下面是一个简单的示例:

  1. 首先,定义一个服务契约(Service Contract),其中包含一个用于订阅的操作(Subscribe)和一个用于回调的操作(Callback)。
代码语言:csharp
复制
[ServiceContract]
public interface IMyService
{
    [OperationContract(IsOneWay = true)]
    void Subscribe();

    [OperationContract(IsOneWay = true)]
    void Callback(string message);
}
  1. 实现服务契约的具体逻辑。
代码语言:csharp
复制
public class MyService : IMyService
{
    private List<IMyServiceCallback> subscribers = new List<IMyServiceCallback>();

    public void Subscribe()
    {
        IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
        if (!subscribers.Contains(callback))
        {
            subscribers.Add(callback);
        }
    }

    public void Callback(string message)
    {
        foreach (var subscriber in subscribers)
        {
            subscriber.OnCallback(message);
        }
    }
}
  1. 定义回调契约(Callback Contract)。
代码语言:csharp
复制
public interface IMyServiceCallback
{
    [OperationContract(IsOneWay = true)]
    void OnCallback(string message);
}
  1. 在客户端中,实现回调契约的具体逻辑。
代码语言:csharp
复制
public class MyServiceCallback : IMyServiceCallback
{
    public void OnCallback(string message)
    {
        Console.WriteLine("Received callback: " + message);
    }
}
  1. 在客户端中,创建WCF代理并订阅服务。
代码语言:csharp
复制
InstanceContext instanceContext = new InstanceContext(new MyServiceCallback());
MyServiceClient client = new MyServiceClient(instanceContext);
client.Subscribe();
  1. 在服务端中,调用回调操作发送消息给客户端。
代码语言:csharp
复制
foreach (var subscriber in subscribers)
{
    subscriber.OnCallback("Hello from server!");
}

这样,服务端就可以通过回调操作向订阅了服务的客户端发送消息。

在腾讯云的云计算平台中,可以使用腾讯云的云服务器(CVM)作为部署WCF服务的基础设施,使用腾讯云的消息队列(CMQ)来实现消息的发布和订阅,使用腾讯云的云数据库(CDB)来存储数据,使用腾讯云的云函数(SCF)来实现回调逻辑等。具体的产品和介绍链接如下:

  • 腾讯云服务器(CVM):提供高性能、可扩展的云服务器实例,用于部署WCF服务。产品介绍链接
  • 腾讯云消息队列(CMQ):提供高可靠、高可用的消息队列服务,用于实现消息的发布和订阅。产品介绍链接
  • 腾讯云数据库(CDB):提供稳定可靠、高性能、可扩展的关系型数据库服务,用于存储数据。产品介绍链接
  • 腾讯云云函数(SCF):提供事件驱动的无服务器计算服务,用于实现回调逻辑。产品介绍链接

通过使用以上腾讯云的产品,可以构建一个完整的WCF双工通信的解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

双工MEP又具有一些变体,比如典型的订阅-发布模式就可以看成是双工模式的一种表现形式。双工消息交换模式使服务端(Callback)客户端操作成为可能。...图1描述了这样的过程,服务调用和都采用请求-回复MEP。 ? 图1 请求过程中的 2.订阅-发布 订阅-发布模式是双工模式的一个典型的变体。...订阅-发布消息交换模式如图2所示。 ? 图2 订阅-发布 二、实例演示:创建基于双工通信的WCF应用 接下来我们通过一个的案例演示基于双工通信的WCF应用。为简单起见,我们沿用计算服务的例子。...WCF采用基于服务契约的调用形式,客户端正常的服务调用需要服务契约,同理服务端客户端依然需要通过描述操作的服务契约,我们把这种服务契约称为契约。...WSDualHttpBinding通过创建两个单项信道的方式提供双工通信的实现。 对于一个双工通信的WCF服务来说,调过程本质上也是一种服务调用,是对寄宿于客户端的服务的调用。

1.1K100

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

双工MEP又具有一些变体,比如典型的订阅-发布模式就可以看成是双工模式的一种表现形式。双工消息交换模式使服务端(Callback)客户端操作成为可能。...本文测试Mono 3.0.2/.NET 4对双工(Duplex)模式的WCF支持。...WCF采用基于服务契约的调用形式,客户端正常的服务调用需要服务契约,同理服务端客户端依然需要通过描述操作的服务契约,我们把这种服务契约称为契约。...在WCF中,对象通过当前OperationContext的GetCallback方法获得(T代表契约的类型)。 ?...具体可以参看 WCF置于Mono下遇到的一些问题 在MONO下实现WCF所遇到的问题 步骤四:实现契约 在客户端程序为契约提供实现,在下面的代码中CalculateCallback实现了契约

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

    消息会被WCF的信道层发送到传输层,并通过相应的传输协议发送到目的地。对于TCP协议来说,其本身就能提供一个双工通道,所以能够对以上三种MEP原生的支持。...双工通信使服务端客户端操作成为可能。比较典型Duplex通信是我们熟悉的订阅/发布模式。订阅/发布模式下的消息交换双方的角色从传统的发送方和接收方变成了订阅方和发布方。...WCF通过WsDualHttpBinding实现了基于HTTP协议的双工通信,实际上是采用了两个HTTP通道实现的。...WCF通过双工通信实现了服务端对客户端的。假设客户端采用One-way的方式调用服务,而服务端同样以One-Way的方式对客户端进行。...在这个过程中,正常的服务调用和实现上是在不同的HTTP通道中进行的。从消息交换的角度讲,客户端调用服务端和服务端对客户端进行,本质上是一样的。

    1K70

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

    图3 请求-回复消息交换模式 双工模式(Duplex) 如果采用双工的消息交换模式,在进行消息交换过程中,任何一方都可以向对方发送消息,如图4所示。...图4双工消息交换模式 双工通信使服务端客户端成为可能:客户端在调用服务的时候,指定一个对象,服务端操作执行过程中可以通过对象客户端的操作。比较典型双工通信是我们熟悉的订阅/发布模式。...订阅/发布模式下的消息交换双方的角色发生了变化,传统的发送方和接收方变成了订阅方和发布方。订阅方向发布方发送订阅消息定于某一主题进行订阅,发布方接收到订阅消息后将订阅方添加到订阅列表之中。...对于双工通信模式来说,它对于基于TCP协议的通信来说是完全没有问题,因为TCP协议本身就是全双工的网络通信协议。但是对于HTTP来说,它本身就是简单的基于请求/回复的网络协议,是不支持双工通信的。...WCF通过WsDualHttpBinding实现了基于HTTP协议的双工通信,实际上是采用了两个HTTP通道实现的。 3.2.

    41220

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

    2019-1-30-wcf入门(10) - huangtengxiao中介绍了wpf提供的2种错误协定回馈异常的方式。...没错就是2019-1-25-wcf入门(5) - huangtengxiao中提到的双工模式 说白了,就是添加一个传递异常信息的接口,在发生异常时向这个接口发送异常信息 ?...存在问题 既然是利用双工协定,那么必然需要一些双工协定的必要支持,例如绑定,会话,实例化等选择 这个会在一些期望添加单向模式异常反馈的现有WCF方案造成一些限制 小结 我们研究了WCF服务的单向模式异常反馈...,其特点有 利用双工在业务层实现 有双工模式的限制 能处理单向操作 参考链接: 如何:在服务协定中声明错误 - Microsoft Docs 定义和指定错误 - Microsoft Docs 在协定和服务中指定和处理错误...- Microsoft Docs 2019-1-29-wcf入门(9) - huangtengxiao 2019-1-30-wcf入门(10) - huangtengxiao 2019-1-25-wcf

    31620

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

    此方法与前面的请求/答复示例相同,单思,将IsOneWay属性设置为true意味着尽管方法相同,服务操作也不会发送返回消息,而客户端将在出站消息抵达通道层时立即返回   双工模式     --双工模式的特点是...第三种双工模式   首先创建服务接口和客户端接口 [ServiceContract(CallbackContract=(typeof(IClientCallBack)))] public...配置预定义绑定类型   在WCF预定义绑定类型中,WSDualHttpBinding和NetTcpBinding均提供了对双工通信的支持,但是两者在对双工通信的实现机制上却有本质的区别。...然后我们实现在上面服务端建立的客户端接口 ?...将示例代码上传,可以点击下载

    87920

    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

    53250

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

    Mono 3.0.2 基于双工通信的WCF应用 Demo 的讨论中 深蓝医生 提到了一个问题: 楼主,找了几天,终于明白我的程序错误在哪里了,在服务契约上加入下面的接口方法: [OperationContract...双工服务中,方法不支持 IsOneWay = false 的情况,也就是服务的双向调用。...有时候需要“同步”的,这也是合理的需求呀,我把他这个方法进去进行测试: ? 然后在服务的实现上加上ServiceBehavir的UseSynchronizationContext 进行设定。...WCF的service操作默认实现了对Host service的当前线程的SynchonizationContext实现了关联。...代码下载 相关文章: WCF 中的同步环境 WCF后续之旅(11): 关于并发、的线程关联性(Thread Affinity)

    53960

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

    ,同时服务端也可以向客户端发送消息 双工模式实际上是由客户端->服务端的服务协议和服务端->客户端的调协议组成。...) 注意我们通过设置 ServiceContract的CallbackContract指定服务的接口 ?...在客户端的使用时,我们需要将回接口的实现注入到InstanceContext中,并且传入客户端的构造函数 ? 运行程序,我们发现,客户端向服务端发送了消息,服务端也向客户端发送了消息。...实现了双向的通信 小结 我们研究了WCF服务的双工模式,其特点有 可以实现双向通信 协定的每个方法都可以通过OperationContract指定为单向或者请求答复模式 双工协定要求Binding支持双工模式...//xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-5.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    32020

    2019-1-28-wcf入门(8)

    我们建立了一个双工通信,服务的操作协定是单向的,的操作协定是请求答复(同步)的。方法在每次调用都使用新实例,并且在方法中我们做了3秒的sleep,模拟通信延时。...结果如图所示,在等待返回时出现了死锁 ? 因为我们在返回时,尝试访问服务对象。可是服务对象是单线程同步的,正在等待方法的返回,造成死锁。 现在我们尝试将回方法的操作协定改为单向 ?...小结 我们研究了WCF服务的并发,其特点有 Single保持单线程同步,但是可能会死锁 Reentract,允许调用其他服务时重入,类似于async/await Mutiple,允许多线程访问 参考链接...: 【WCF】服务并发中的“可重入模式” - 东邪独孤 - 博客园 ConcurrencyMode Enum (System.ServiceModel) - Microsoft Docs ---- 本文会经常更新...,请阅读原文: https://xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-8.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    30940

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

    本节最后通过一个非常简单的自寄宿的WCF示例来熟悉WCF的应用以及引入传说中的三要素"ABC",Address服务地址、Binding服务绑定、Contract服务契约,之后将分节进行详细介绍 1 Contract...示例如下。...实际上就对应配置中的Contract名称;SessionMode表示契约的会话模式,比如Allowed、Required等;ProtectionLevel表示消息的保护级别;CallbackContract在双工通信时指定操作的接口类型...提到消息交换的模式,记得之前提到过主要的三种请求-回复、单向和双工,前两项之前的例子中已有展示,之后的示例将展示双工模式。..."/> 70 71 当调用以上示例的服务时,会抛出一个关于死锁的异常,原因是其在并发场景下会造成死锁的情况,可以通过将请求或方法设置为单向即可

    1.1K100

    “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式(点对点)

    我们可以看看网友写的这篇文章《不引用服务而使用WCF,手动编写客户端代理类 》,看看直接使用WCF是如何手动编写客户端代理类的。...对象,通过它可以知道请求相关的上下文信息; 然后,会有一个 IsUnSubscribe 属性,表示本次请求是否是一个自定义的服务订阅而不再继续执行系统的服务订阅,虽然本次的示例是演示“请求-响应”的通信模式的...,其实都是传入一个委托方法给RequestService 方法,然后服务端此委托方法的,而此委托方法的时机是不确定的,相对于调用线程它是异步执行的,所以我们称呼前面2种调用方式为“异步委托方法”...这种方式的一大缺点就是我们的代码中会有大量的难以阅读和调试的异步代码。.NET 4.0之后提供了Task对象它可以简化这种调用过程,使得代码写起来就跟同步调用代码一样。...虽然MSF是基于WCF构建的,但是从本文的示例过程看,仅使用MSF,无需掌握任何WCF的知识。

    1K80

    路由服务

    我们知道,针对某个服务操作的调用可以通过三种不同的消息交换模式来实现,即数据报/单向(Datagram/One-Way)、请求/回复(Request/Reply)和双工(Duplex)。...而基于双工消息交换模式的IDuplexSessionRouter,除了也将会话模式设置为SessionMode.Required之外,还定义了的类型IDuplexRouterCallback。...我们知道,所谓的双工消息交换模式实际上可以看作是多次基于简单模式(数据报和请求/回复模式)的消息交换的组合。...如果忽略服务端对客户端的,单独来看双工模式下服务调用采用的消息交换模式,它可以是单向的,也可以是基于请求/回复模式的。...实际上,在这种情况下,不论是针对服务端客户端的消息,还是最终调用完成后的回复消息,都是通过路由服务对客户端的调来实现消息的路由的。

    58770

    快速入门系列--WCF--06并发限流、可靠会话和队列服务

    由于WCF的并发出来属于服务自身的行为,因此通过服务行为对其进行控制,ServiceBehaviorAttribute(之后的CallbackBehaviorAttribute与此类似)中的ConcurrencyModel...Multiple三种典型的并发模式,Single表示一个实例上下文InstanceContext只能用于单一请求的处理,Reentrant也表示一个实力上下文某一时刻只能用于对单一请求的处理,但若涉及...那么它与现在要提及的WCF中RM有什么区别呢?...PendingChannel就会加1,因此需要为MaxPendingChannels设置一个合适的值,太低服务利用率不高,太高会影响到工作集的状态,默认为4 可靠会话和宿主 可靠会话是有状态的,有AppDomain维护,在双工场景下...基于MSMQ的API都集中在System.Messaging中,其常见的路径格式及其示例如下。

    1K70

    WCF技术剖析(卷1)》(修订版)目录

    第1章 WCF简介 (WCF Overview) 1.1 SOA的基本概念和设计思想 1.2 WCF是对现有Windows平台下分布式通信技术的整合 1.3 构建一个简单的WCF应用 1.3.1 步骤一...WCF实现了CLR类型和XML的适配 4.2. 定义服务契约 4.3.1. ServiceContractAttribute 4.3.2....双工模式 4.4.4. 实例演示:通过双工通信实现 4.5. 多线程与异步操作 4.5.1. 异步服务调用 4.5.2. 异步服务实现 4.6. 操作的选择与执行 4.6.1....一个精简版的WCF框架 8.1.1. 从透明代理和真实代理说起 8.1.2. 服务代理的真实代理是什么? 8.1.3. 服务调用的大致流程 8.1.4....会话服务决定于会话信道(栈)和会话实例上下文模式 第10章 WCF实例研究 (WCF in Practice) 10.1. VM简介 10.1.1. 基本功能 10.1.2.

    1.1K80

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

    而对于双工通信来说,由于客户端满足这样要求,所以从服务端客户端的传输安全是无法确保的。...双工通信需要一个双工的通信通道,但是属性TCP/IP的读者应该很清楚,HTTP协议仅仅是一个单纯的请求/回复通信协议,也就是说基于HTTP的通信通道不可以支持双工通信,那么WsDualHttpBinding...又是如果在HTTP传输协议上实现双工通信的呢?...,所以和WsDualBinding一样可以用于基于双工消息交换模式的WCF应用中。...WCF中的绑定模型: [WCF中的Binding模型]之一: Binding模型简介 [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack) [WCF

    915100

    分布式系统的消息&服务模式简单总结

    Pull“拉”的好处包括: 1、如果观察者众多,订阅者来维护订阅者的列表,可能困难,或者臃肿,把订阅关系解脱到观察者去完成。...但有时候,客户端发出的请求服务端需要进行长时间的处理才能返回结果给客户端,让客户端长时间等待就不合理了,这时候可以使用异步处理技术,客户端发出请求后就返回到自己的处理线程,服务器处理完成后客户端提供的方法...比如PDF.NET的消息服务器框架(MSF),就是基于WCF的TCP双工长连接,来实现服务器推送消息的。    ...MSF的“请求模式”也支持服务器推送消息,即在一次请求过程中,服务器可以多次推送消息给客户端,“”客户端提供的函数,所以这种结果通常作为服务器最终响应结果的“中间结果”。...比如请求一个文件上传服务,服务器多次回客户端,读取客户端的文件数据。

    2.5K70
    领券