WCF线程怎么用
小编给大家分享一下WCF线程怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
虽然有许多人对WCF线程表示怀疑,但在年复一年的不断发展中,他的安全性也在不断提高。保障WCF线程正常运行是完全有可能的,但前提是要深入理解到底什么是WCF线程,及他是怎么运作的。
对于这些操作,任意创建一个新的线程来执行都是等效的。但是有些情况下,有些操作却只能在固定的线程下执行。比如,在GUI应用下,对控件的访问就需要在创建该控件的线程下执行;
或者我们在某个固定的线程中通过TLS(Thread Local Storage)设置了一些Context信息,供具体的操作使用,我们把操作和某个固定的线程的依赖称为线程关联性(Thread Affinity)。
对应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就可以了
namespace Artech.ThreadAffinity.Clients { [CallbackBehavior(UseSynchronizationContext = false)] public class CalculateCallback : ICalculateCallback { public static TextBox ResultPanel; #region ICalculateCallback Members public void DisplayResult(double result) { ResultPanel.Text = result.ToString(); } #endregion } }
看完了这篇文章,相信你对“WCF线程怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341