您好,登錄后才能下訂單哦!
小編給大家分享一下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線程怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。