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