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