進行WCF Service詳細解讀
本文主要講述WCF Service,怎樣創建WCF Service項目。這些內容都是一些門戶網站和技術論壇找到的,中間可能有不少錯誤是我沒有挑出的,歡迎大家指正。
上一篇文章中,我們重點討論了線程關聯性對service和callback的操作執行的影響:在service host的時候,可以設置當前線程的SynchronizationContext,那么在默認情況下,service操作的執行將在該SynchronizationContext下執行(也就將service操作包裝成delegate傳入SynchronizationContext的Send或者Post方法);#t#
同理,對于Duplex同行方式來講,在client調用service之前,如果設置了當前線程的SynchronizationContext,callback操作也將自動在該SynchronizationContext下執行。
對于Windows Form Application來講,由于UI Control的操作執行只能在control被創建的線程中被操作,所以一這樣的方式實現了自己的SynchronizationContext(WindowsFormsSynchronizationContext):將所有的操作Marshal到UI線程中。正因為如此,當我們通過Windows Form Application進行WCF Service的host的時候,將會對service的并發執行帶來非常大的影響。
詳細講,由于WindowsFormsSynchronizationContext的Post或者Send方法,會將目標方法的執行傳到UI主線程,所以可以說,所有的service操作都在同一個線程下執行,如果有多個client的請求同時抵達,他們并不能像我們希望的那樣并發的執行,而只能逐個以串行的方式執行。
我們可以通過一個簡單的例子證明:在默認的情況下,當我們通過Windows Form Application進行service host的時候,service的操作都是在同一個線程中執行的。我們照例創建如下的四層結構的WCF Service應用: