WCF中的同步环境

目录

什么是 .NET 同步环境?

WCF 和同步环境

服务自定义 同步环境

线程关联同步环境

优先级处理

回调和同步环境

为什么要使用同步环境?

Windows Communication Foundation (WCF) 的一个比较有用的功能是它依赖 Microsoft .NET Framework 同步环境来封送对服务实例(或回调对象)的调用。此机制同时为面 向生产力的开发和强大的可扩展性提供支持。在本专栏中,我将简要说明什么是 同步环境,以及 WCF 如何使用它们,然后会演示可用于扩展 WCF 的各个选项, 从而以编程的方式或声明的方式使用自定义的同步环境。除了解自定义同步环境 的优点之外,您还将看到一些高级的 .NET 编程,以及 WCF 可扩展性技术。

什么是 .NET 同步环境?

.NET Framework 2.0 引入了一个鲜为 人知的功能,称为同步环境,它由 System.Threading 命名空间中的 SynchronizationContext 类定义:

public delegate void SendOrPostCallback(object state);
public class SynchronizationContext
{
  public virtual void Post (SendOrPostCallback callback,object state);
  public virtual void Send(SendOrPostCallback callback,object state);
  public static void SetSynchronizationContext
(SynchronizationContext context);
  public static SynchronizationContext Current
  {get;}
  //More members
}

同步环境存储在线程本 地存储 (TLS) 中。使用 .NET Framework 2.0 创建的每个线程都可以有一个可 通过 SynchronizationContext 的静态 Current 属性获得的同步环境(与环境 事务类似)。如果当前的线程没有同步环境,则 Current 可能会返回空值。同 步环境可用来在调用线程和目标线程之间传递方法调用(万一该方法无法在原来 的调用线程上执行)。调用线程会封装其准备封送到另一个(些)线程的方法( 通过 SendOrPostCallback 类型的委托),然后分别针对同步或异步执行,将其 提供给 Send 或 Post 方法。通过调用静态方法 SetSynchronizationContext 可将同步环境与当前的线程关联起来。

迄今为止,最常见的同步环境用 法与 UI 更新有关。在所有的多线程 Windows 技术中(从 MFC 到 Windows Forms,再到 WPF),只有创建了窗口的线程才可以通过处理其消息来更新它。 这个限制与 Windows 消息循环和线程消息传递体系结构的基础用法有关。在开 发多线程 UI 应用程序时,消息传递体系结构会产生一个问题 — 您会希 望在执行耗时较长的操作或接收回调时避免阻止 UI。当然,这样就必须使用工 作线程,然而那些线程却无法直接更新 UI,因为它们不是 UI 线程。

在 .NET Framework 2.0 中,为了解决这个问题,任何基于 Windows Forms 的控件 或窗体的构造函数都会查看它正在其上运行的线程是否有同步环境,如果没有, 该构造函数就会附加一个新同步环境(称为 WindowsFormsSynchronizationContext)。这个专用的同步环境可以将所有对其 Post 或 Send 方法的调用转换成 Windows 消息,并将它们发布给要在正确的线 程上处理的 UI 线程消息队列。Windows Forms 同步环境是常用的 BackgroundWorker 帮助器控件背后的基础技术。

时间: 2025-01-30 09:04:27

WCF中的同步环境的相关文章

WCF中并发(Concurrency)与限流(Throttling)体系深入解析系列[共7篇]

服务(Service)的本质就是提供服务消费者期望的某种功能,服务的价值体现在两个方面:服务本身的质量和寄宿服务的平台应付消费者的数量,并发(Concurrency)的关注的是第二个要素.WCF服务寄宿于资源有限的环境中,要实现服务效用的最大化,需要考虑如何利用现有的资源实现最大的吞吐量(Throughput).提高吞吐量就某个寄宿的服务实例(Service Instance)来说,一个重要的途径就是让它能够同时处理来自各个客户端(服务代理)的并发访问.WCF实现了一套完整的并发控制体系,为你提

关于支付系统中的同步通知和异步通知电商的区别,为什么需要通知

问题描述 关于支付系统中的同步通知和异步通知电商的区别,为什么需要通知 在电商对应的支付系统中当支付完成之后需要做相关的同步通知和异步通知操作,请大神解释一下什么是同步通知和异步通知,为什么需要同步通知和异步通知. 解决方案 同步用于即时通知支付完成 异步用于防止信息漏发漏收 解决方案二: 可以这样理解, 1.用户(买家)支付完成后,电商平台需要实时的给用户一个通知,如支付已经处理等待订单确认. 2.电商平台,这块就需要考虑系统技术方面的各个环节,考虑应对复杂多变的并发用户量.业务.流量.网络环

WCF技术剖析之十一:异步操作在WCF中的应用(下篇)

说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现.在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern.该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理. 一.异步操作的定义和实现原理 实现WCF异步服务操作模式在编程上具有一些限制:异步服务操作是通过两个配对的方法实现

WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作处理时间花在I/O操作处理,比如访问数据库.文件系统.网络资源等.对于I/O绑定型操作,我们可以充分利用多线程的机制,让多个操作在自己的线程并发执行,从而提高系统性能和响应能力.服务调用就是典型的I/O绑定型操作,所以多线程在服务调用中具有广泛的应用.在本篇文章中,我们专门来讨论多线程或者是异步操作

谈谈WCF中的Data Contract (1):Data Contract Overview

Contract in SO:Contract是对操作和数据的抽象 在我们看来,Service Orientation提供了一种对业务.功能进行分解的方式.针对SO,我们把一个具体的业务流程或者一个复杂的功能分解成一个个独立完成某项任务的子单元,这些子单元通过一个个Service来承载.对于Service本身来讲,他们应该是自治的,独自完成自己的功能.不依赖于其他的Service.但是Service的价值体现在它被潜在的消费者使用的程度.这实际上包含两方面的内容,作为Service本身,它如何将

我的WCF之旅(8):WCF中的Session和Instancing Management

WCF中的Session 我们知道,WCF是MS基于SOA建立的一套在分布式环境中各个相对独立的Application进行Communication的构架.他实现了最新的基于WS-*规范.按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service.对于承载着某个业务功能的实现的Service应该具有Context无关性.甚至是Solution无关性,也就是说个构成Service的operation不应该绑定到具体的调用上下文,对于任何调用

我的WCF之旅(4):WCF中的序列化(Serialization)- Part I

SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA)的一种理想的分布式技术(Distributed Technology), 相信在今后在建立基于SOA企业级别的解决方案和进行系统集成方面将会大有作为.一个基于SOA结构的互联系统(Connected System)通常由若干相互独立的子系统(Sub-System)组成,这些子系统可能一个独立的App

WCF中的Binding模型之一: Binding模型简介

一. 信道层与服务模型层(Channel Layer and Service Mode Layer) 对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,同时也是最为复杂.最难实现的问题.在过去的若干年中, 微软先后推出了一系列广受欢迎的通信技术, 比如DCOM.Enterprise Service..NET Remoting.XML Web Service.MSMQ等等.这些技术提供了各自的编程模型,是开发人员从繁琐的完全基于通信的编程中解脱出来,使之仅仅需要关注具体的业务逻辑.WCF是

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

由于绑定对象由一系列有序的绑定元素组成,绑定元素最终决定着信道栈中信道的组成,而信道的组成最终又决定了信道栈对消息进行处理的方式和能力,所有要确定绑定的特性和能力,我们可以通过查看其绑定元素的构成来一窥究竟.为此我们我们写了一个简单的方法,用于列出一个具体的绑定对象所有的绑定元素,在介绍一个个具体的系统绑定中,我会使用该方法: 1: static void ListAllBindingElements(Binding binding) 2: { 3: BindingElementCollecti