C# 自駐留的WCF服務(wù)
駐留在Web服務(wù)器上的WCF服務(wù)可以在Internet上通信,但對(duì)于本地網(wǎng)絡(luò)通信而言,這并不是最高效的方式。一方面,需要用計(jì)算機(jī)上的Web服務(wù)器駐留服務(wù);另一方面,在應(yīng)用程序的體系結(jié)構(gòu)上出現(xiàn)一個(gè)獨(dú)立的WCF服務(wù)可能并不合適。
因此應(yīng)使用自駐留的WCF服務(wù)。自駐留的WCF服務(wù)存在于創(chuàng)建它的進(jìn)程中,而不存在于特別建立的主機(jī)應(yīng)用程序(如Web服務(wù)器)的進(jìn)程中。這意味著可以使用控制臺(tái)應(yīng)用程序或Windows應(yīng)用程序駐留服務(wù)了。
要建立自駐留的WCF服務(wù),需要使用System.ServiceModel.ServieceHost類。用要駐留的服務(wù)類型或服務(wù)類的一個(gè)實(shí)例來(lái)實(shí)例化這個(gè)類。通過(guò)屬性或方法可以配置服務(wù)宿主,也可以通過(guò)配置文件來(lái)配置。實(shí)際上,宿主進(jìn)程(如Web服務(wù)器)使用ServiceHost實(shí)例執(zhí)行該駐留任務(wù)。自駐留時(shí),區(qū)別是直接與這個(gè)類交互操作。但在宿主應(yīng)用程序的app.config文件中,<system.serviceModel>段中的配置使用的語(yǔ)法與前面的配置段中的相同。
可以通過(guò)任意協(xié)議提供自駐留的WCF服務(wù),但是一般在這種類型的應(yīng)用程序中使用TCP或命名管道綁定。通過(guò)HTTP訪問(wèn)的服務(wù)常常位于Web服務(wù)器進(jìn)程中,因?yàn)榭梢垣@得Web服務(wù)器提供的額外功能,如安全性等。
如果要駐留MyService服務(wù),可使用下面的代碼創(chuàng)建ServiceHost的一個(gè)實(shí)例:
ServiceHost host = new ServiceHost{typeof(MyService));
如果要駐留MyService的實(shí)例MyServiceObject,可以編寫(xiě)如下代碼,創(chuàng)建ServiceHost的一個(gè)實(shí)例:
MyService myServiceObject = new MyService();
ServiceHost host = new ServiceHost(myServiceObject);
創(chuàng)建ServiceHost實(shí)例后,就可以通過(guò)屬性配置服務(wù)及其端點(diǎn)和綁定。另外,如果把配置放在.config文件中,將會(huì)自動(dòng)配置ServiceHost實(shí)例。
有了配置好的ServiceHost實(shí)例后,為了開(kāi)始駐留服務(wù),應(yīng)使用ServiceHost.Open()方法。同樣,通過(guò) ServiceHostCloseO方法可以停止駐留服務(wù)。第一次駐留TCP綁定的服務(wù)時(shí),如果啟用它,可能收到Windows防火墻服務(wù)發(fā)出的一個(gè)警告,因?yàn)樗枞四J(rèn)的TCP端口。只有給這個(gè)服務(wù)打開(kāi)TCP端口,才能開(kāi)始監(jiān)聽(tīng)該端口。
點(diǎn)擊加載更多評(píng)論>>