驻留在Web服务器上的WCF服务可以在Internet上通信,但对于本地网络通信而言,这并不是最高效的方式。一方面,需要用计算机上的Web服务器驻留服务;另一方面,在应用程序的体系结构上出现一个独立的WCF服务可能并不合适。
因此应使用自驻留的WCF服务。自驻留的WCF服务存在于创建它的进程中,而不存在于特别建立的主机应用程序(如Web服务器)的进程中。这意味着可以使用控制台应用程序或Windows应用程序驻留服务了。
要建立自驻留的WCF服务,需要使用System.ServiceModel.ServieceHost类。用要驻留的服务类型或服务类的一个实例来实例化这个类。通过属性或方法可以配置服务宿主,也可以通过配置文件来配置。实际上,宿主进程(如Web服务器)使用ServiceHost实例执行该驻留任务。自驻留时,区别是直接与这个类交互操作。但在宿主应用程序的app.config文件中,<system.serviceModel>段中的配置使用的语法与前面的配置段中的相同。
可以通过任意协议提供自驻留的WCF服务,但是一般在这种类型的应用程序中使用TCP或命名管道绑定。通过HTTP访问的服务常常位于Web服务器进程中,因为可以获得Web服务器提供的额外功能,如安全性等。
如果要驻留MyService服务,可使用下面的代码创建ServiceHost的一个实例:
ServiceHost host = new ServiceHost{typeof(MyService));
如果要驻留MyService的实例MyServiceObject,可以编写如下代码,创建ServiceHost的一个实例:
MyService myServiceObject = new MyService();
ServiceHost host = new ServiceHost(myServiceObject);
创建ServiceHost实例后,就可以通过属性配置服务及其端点和绑定。另外,如果把配置放在.config文件中,将会自动配置ServiceHost实例。
有了配置好的ServiceHost实例后,为了开始驻留服务,应使用ServiceHost.Open()方法。同样,通过 ServiceHostCloseO方法可以停止驻留服务。第一次驻留TCP绑定的服务时,如果启用它,可能收到Windows防火墙服务发出的一个警告,因为它阻塞了默认的TCP端口。只有给这个服务打开TCP端口,才能开始监听该端口。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>