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






