WCF:什么是ServiceHost?

39

我目前正在学习如何使用WCF服务,一直在网上遇到一些教程提到当使用WCF服务时需要使用ServiceHost

那么,什么是ServiceHost


在我的当前项目中,我正在使用一个WCF服务,并且从我的应用程序中引用它。每当我想要从应用程序中调用该服务时,我只需实例化其ServiceClient,例如:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress);
然后从该实例访问我的Web方法(显然在使用方法之前打开它,并在使用完毕后使用OpenClose关闭)。
我的WCF服务托管在IIS中,我只需从应用程序访问.svc以实例化ServiceClient
那么,ServiceHost是在哪里以及为什么要使用它?
2个回答

33

18
几乎正确 - 即使是IIS和WAS也会使用ServiceHost来托管您的WCF服务 - 它们会在幕后自动地创建并关闭它。 - marc_s
4
是的,我只是试图描述在您自己的代码中何时会看到ServiceHost。通常开发人员不直接访问IIS/WAS ServiceHost。 - Andy White
是的,没错 - 在 IIS/WAS 场景中,ServiceHost 几乎是看不见的 :) - marc_s
16
我喜欢微软那个烂网页上“提供服务主机”的表述,这是什么鬼。谢了,微软,一无所获。我在那个页面上什么也没学到。 - PositiveGuy
1
你需要查看MS页面底部的“Remarks”和“Examples”部分,这些部分提供了比“为服务提供主机”更好的解释。 - kevinpo

29

您的服务实现只是一个 .NET 类 - 您需要为其准备运行时环境,以便可以执行。这就是 ServiceHost 的作用 - 它将加载您的服务类,设置端点和通道侦听器等所有内容,并因此为您的服务类提供“生态系统”来生存和操作。

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

Marc


1
你会在TDD测试中使用它吗?比如,你想要测试调用HTTP请求(WebOperationContext)发送特定的头部或数据到WCF服务方法。 - PositiveGuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接