WCF自托管應(yīng)用技巧講解
WCF是一個(gè)比較重要的.NET Framework 3.5組成部件,它的應(yīng)用在實(shí)際開發(fā)中起著非常重要的作用。在這里我們將會(huì)為大家詳細(xì)講解一下其中WCF自托管的相關(guān)概念,希望能夠給大家?guī)硪恍椭?t#
我們一般創(chuàng)建的是以IIS為宿主的,所以我們平常在VS2008中創(chuàng)建的項(xiàng)目,都是IIS托管的。
但是,WCF還有另一種托管方式,稱為WCF自托管(Self-Hosting)。
說得深?yuàn)W些,就是Client和Service共用一個(gè)進(jìn)程。說得通俗些,就是把Client項(xiàng)目和Service項(xiàng)目合二為一,比如說這個(gè)Demo:
C:\Users\baoj\Documents\Visual Studio 2008\Projects\WCFSolution。
Demo中一共3個(gè)文件,Contract.cs和App.config組成了Service,前者包括了契約及其實(shí)現(xiàn),后者包括了Service的Endpoint,請(qǐng)下載上面的代碼并參考相應(yīng)文件。
而Program.cs中則是一個(gè)Client,我們看一下這個(gè)宿主是怎樣實(shí)現(xiàn)的:
class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(Service))) { host.Open(); Console.WriteLine("The Service is ready."); Console.ReadKey(true); host.Close(); } }}
這是宿主的最普遍實(shí)現(xiàn)。
我們發(fā)現(xiàn),WCF自托管沒有svc文件,可見,svc只是為IIS托管而準(zhǔn)備的。如果哪天你看到一個(gè)沒有svc的WCF Service,不要驚訝,不過是一個(gè)自托管罷了。
此外,由于把Client和Service放在一起,所以只需要配置Service的Endpoint就可以了。就是說,只有一個(gè)配置文件。
但是,在WCF自托管中,把契約(contract)和Client寫在一起,是很亂的——瞧人家IIS托管,丁是丁卯是卯,Service和Client完全是分開的。于是,VS2008為我們提供了WCF Service Library這個(gè)項(xiàng)目模板,來解決這個(gè)問題:
于是我們創(chuàng)建這樣的一個(gè)項(xiàng)目,我們發(fā)現(xiàn),項(xiàng)目中只包括契約和配置文件。
接下來就靈活了,我們可以添加一個(gè)Console控制臺(tái)程序ConsoleApplication1,然后添加對(duì)WcfServiceLibrary2的引用(注意是項(xiàng)目引用,而不是Service引用),參考下面的示例:
C:\Users\baoj\Documents\Visual Studio 2008\Projects\WcfServiceLibrary2C:\Users\baoj\Documents\Visual Studio 2008\Projects\WcfServiceLibrary2
需要注意的是,我們要把WcfServiceLibrary2中的App.config轉(zhuǎn)移到ConsoleApplication1項(xiàng)目中,不需要說原因了吧~~
切記,轉(zhuǎn)移的意思是是cut,而不是copy。要確保WcfServiceLibrary2中沒有這個(gè)配置文件,不然就會(huì)報(bào)錯(cuò),說已經(jīng)占用這個(gè)地址了。