2009-05-03 66 views
36

由于我目前正在学习使用WCF服务,因此在使用WCF服务时,我经常遇到在互联网上提到使用ServiceHost的教程。WCF:什么是ServiceHost?

这究竟是什么ServiceHost


在我目前的项目我使用的是WCF服务,并具有从我的应用程序引用它,每当我想从我的应用程序占用了,我只是实例其ServiceClient像这样:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress); 

,然后从实例(食用方法前明显打开它,并与OpenClose后关闭它)

我的访问我的网站的方法(OperationContract S) WCF服务是我的IIS中的主机,我只需从我的应用程序访问.svc即可实例化ServiceClient

那么为什么和在哪里使用ServiceHost

回答

29

ServiceHost基本上为您提供了在非IIS或WAS设置中托管WCF服务所需的一切。 ServiceHost的常见位置是控制台应用程序或Windows服务。请参阅来自MSDN的示例代码how to setup a ServiceHost in a console app

+18

几乎是正确的。 - 即使IIS和WAS也会使用ServiceHost来托管您的WCF服务 - 他们只是创建它并将其自动撕下。 – 2009-05-03 08:15:42

+4

是的,我只是想描述一下当你在自己的代码中看到一个ServiceHost。 IIS/WAS ServiceHost通常不由开发人员直接访问。 – 2009-05-03 09:43:50

23

你的服务实现只是一个.NET类 - 你需要有一个运行时环境,所以它可以以某种方式执行。这就是ServiceHost的用处 - 它将加载你的服务级别,设置端点和通道监听器以及所有这些东西,从而为你的服务级别提供一个“生态系统”来生存和运行。

你可以实例化您可以在控制台应用程序,Windows服务甚至Winforms应用程序中使用ServiceHost类,从而使您的WCF服务类可用于外部世界 - 或者可以将该工作委托给IIS或WAS。即使IIS或WAS将使用ServiceHost的托管WCF服务 - 他们只是做自动的在幕后,并“按需” - 每当你的WCF服务的请求进来

马克