位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 自駐留的WCF服務(wù)

提問人:劉團圓發(fā)布時間:2020-12-11

    駐留在Web服務(wù)器上的WCF服務(wù)可以在Internet上通信,但對于本地網(wǎng)絡(luò)通信而言,這并不是最高效的方式。一方面,需要用計算機上的Web服務(wù)器駐留服務(wù);另一方面,在應(yīng)用程序的體系結(jié)構(gòu)上出現(xiàn)一個獨立的WCF服務(wù)可能并不合適。

    因此應(yīng)使用自駐留的WCF服務(wù)。自駐留的WCF服務(wù)存在于創(chuàng)建它的進程中,而不存在于特別建立的主機應(yīng)用程序(如Web服務(wù)器)的進程中。這意味著可以使用控制臺應(yīng)用程序或Windows應(yīng)用程序駐留服務(wù)了。

    要建立自駐留的WCF服務(wù),需要使用System.ServiceModel.ServieceHost類。用要駐留的服務(wù)類型或服務(wù)類的一個實例來實例化這個類。通過屬性或方法可以配置服務(wù)宿主,也可以通過配置文件來配置。實際上,宿主進程(如Web服務(wù)器)使用ServiceHost實例執(zhí)行該駐留任務(wù)。自駐留時,區(qū)別是直接與這個類交互操作。但在宿主應(yīng)用程序的app.config文件中,<system.serviceModel>段中的配置使用的語法與前面的配置段中的相同。

    可以通過任意協(xié)議提供自駐留的WCF服務(wù),但是一般在這種類型的應(yīng)用程序中使用TCP或命名管道綁定。通過HTTP訪問的服務(wù)常常位于Web服務(wù)器進程中,因為可以獲得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ā)出的一個警告,因為它阻塞了默認的TCP端口。只有給這個服務(wù)打開TCP端口,才能開始監(jiān)聽該端口。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部