详细说明WCF线程使用

开发 后端
WCF线程集包括许多新的和改进的用于提高工作效率的功能。IDE 还进行了重新设计,从而向开发人员提供对.NET Framework 组件的直接访问。

虽然有许多人对WCF线程表示怀疑,但在年复一年的不断发展中,他的安全性也在不断提高。保障WCF线程正常运行是完全有可能的,但前提是要深入理解到底什么是WCF线程,及他是怎么运作的。

对于这些操作,任意创建一个新的线程来执行都是等效的。但是有些情况下,有些操作却只能在固定的线程下执行。比如,在GUI应用下,对控件的访问就需要在创建该控件的线程下执行;

或者我们在某个固定的线程中通过TLS(Thread Local Storage)设置了一些Context信息,供具体的操作使用,我们把操作和某个固定的线程的依赖称为线程关联性(Thread Affinity)。 #t#

对应WCF来说,无论是host一个service,还是在调用service时制定callback,在默认的情况下,service和callback的操作将自动和当前的SynchonizationContext进行关联(如何有的话)。

也就是说,如过我们的service被host到Windows Form application下,那么service的操作将在UI 线程下执行;同理,如何我们在一个Windows Forms UI线程下调用duplex service并制定callback,那么callback的最终执行将在UI线程。

关于WCF线程关联性的控制,可以通过ServiceBehavior或者CallbackBehavior的UseSynchronizationContext属性进行设定,该属性默认为true,这正式WCF默认具有线程关联性的原因。

现在我们来实现我们的第二套方案:让Callback的执行不必绑定到UI线程。为此我们只需要加上如何的CallbackBehavior attribute就可以了

  1. namespace Artech.ThreadAffinity.Clients  
  2. {  
  3. [CallbackBehavior(UseSynchronizationContext = false)]  
  4. public class CalculateCallback : ICalculateCallback  
  5. {  
  6. public static TextBox ResultPanel;  
  7. #region ICalculateCallback Members  
  8. public void DisplayResult(double result)  
  9. {  
  10. ResultPanel.Text = result.ToString();  
  11. }  
  12. #endregion  
  13. }  
责任编辑:chenqingxiang 来源: Thread Affinity
相关推荐

2009-12-07 18:06:46

WCF框架

2009-12-08 17:34:25

WCF的配置

2010-02-26 09:42:52

Python线程池

2009-12-11 10:49:04

Visual Stud

2009-12-28 09:26:09

ADO对象

2010-01-08 10:24:38

转换JSON

2010-07-21 13:17:52

Perl文件读写

2010-02-22 17:54:07

Python工具

2010-03-09 10:11:34

Linux挂载命令

2010-02-04 14:41:52

Android菜单类型

2010-02-22 16:26:21

Python编辑

2014-09-16 09:57:56

INotifyProp

2009-12-08 16:09:02

WCF消息

2010-01-07 18:32:38

JSON

2009-12-10 17:54:34

Visual Stud

2010-06-11 16:46:06

openSUSE Fl

2010-03-03 18:17:01

Android手机服务

2010-02-06 17:43:51

Android应用

2010-02-06 15:53:55

2009-12-07 13:12:18

WFC端口
点赞
收藏

51CTO技术栈公众号