隨著.NET Framewrok 3.0的發(fā)布,我再也不用在我的虛擬機VMWare中折騰了。下面就讓我們?yōu)?a href="http://www.rzrgm.cn/huangjizhou/archive/2007/11/26/973208.html">上一篇文章中使用到的服務(wù)契約創(chuàng)建一個托管(host)。為簡便起見,我們用一個控制臺程序來進行演示。
要host服務(wù),必須創(chuàng)建一個ServiceHost對象,ServiceHost類實現(xiàn)了IDisposable接口,因此我們可以使用using語句來創(chuàng)建他(譯者注:使用using語句創(chuàng)建實現(xiàn)了IDisposable接口的類,在程序離開using語句的范圍時,會自動調(diào)用其Dispose方法釋放對象)。
using (ServiceHost host = new ServiceHost(xxx))
{
}
上面代碼中的三個X,表示需要傳遞一個servicetype參數(shù),對于我們這里的例子而言,就是Hello契約。在能夠被WCF使用之前,我們必須將創(chuàng)建的這個host打開。
Type type = typeof(Hello);
using (ServiceHost host = new ServiceHost(type))
{
host.Open();
Console.WriteLine("The service is available. Press any key to continue...");
Console.ReadKey();
host.Close();
}
在上面的例程中,首先聲明了一個type變量,并將Hello服務(wù)契約類型賦給他,然后再將其作為參數(shù)傳遞給ServiceHost,就創(chuàng)建好了一個ServiceHost實例。然后打開這個服務(wù),在控制臺應(yīng)用程序中顯示出運行信息以及提示用戶輸入的信息,如果不加上等待用戶向控制臺輸入的語句,服務(wù)就會立即終止。
WCF需要從配置文件中得到需要的信息,這個配置文件毫無疑問就是app.config。在配置文件中,需要指定WCF的ABC。上面已經(jīng)創(chuàng)建好了服務(wù)契約,但是還需要讓W(xué)CF知道,在那個地址上,通過何種方式的綁定,才能綁定到某個契約中。第一步,編譯應(yīng)用程序。第二步,添加一個app.config文件,右鍵點擊它,選擇'Edit WCF Configuration...',就能看到“Service Configuration Editor”,選擇'Create a New Service...",就會出現(xiàn)一個友好的向?qū)讲僮鹘缑妗?/p>
向?qū)У牡谝徊剑覀冃枰嬖VWCF,我們要使用什么樣的服務(wù)以及這個服務(wù)的具體實現(xiàn)。選擇瀏覽并找到上面的這個控制臺應(yīng)用程序,選擇它,就能看到Hello類,選中即可。向?qū)У南乱粋€頁面中,就會呈現(xiàn)出IHello 就是我們要使用的契約。這里我們可以選擇我們需要使用的綁定方式以及使用的協(xié)議,這里我們選擇缺省參數(shù)即可。接下來的步驟就是選擇缺省設(shè)置,二個類型之間的區(qū)別大致可以視為標(biāo)準(zhǔn)ASP.NET ASMX webservices同WSE 3.0 extension之間的區(qū)別。
WCF ABC的最后一步就是選擇一個地址,比如:http://localhost:8080/HelloService/。選擇這個地址后,系統(tǒng)會對選擇的這個服務(wù)提供一個預(yù)覽。注意仔細(xì)檢查一下向?qū)Ф荚赟ervice Configuration Editor中更改了那些東西。目前需要深入研究的就是"Services"文件夾,因為其他的我們都可以保持不變。設(shè)置完之后,查看app.config,就能看到如下的內(nèi)容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Classa.Wcf.Samples.Hello">
<endpoint
address="http://localhost:8080/HelloService/"
binding="basicHttpBinding"
contract="Classa.Wcf.Samples.IHello"
bindingConfiguration="" />
</service>
</services>
</system.serviceModel>
</configuration>
注意上面的配置文件中,只設(shè)置了一個服務(wù),而這個服務(wù)的名稱空間為Classa.Wcf.Samples, 這是系統(tǒng)自動給加上去的。你可以查看附件中的代碼得到有關(guān)與此的更多信息。目前在這里bindingConfiguration屬性并不是必須的,最重要的還是ABC:Address, binding以及contract!
運行之,服務(wù)就會可以見,但是如何同這個服務(wù)進行通信呢?請看下一帖。
注:要查看原始文章,請看這里的全部索引。
浙公網(wǎng)安備 33010602011771號