WCF:啥是 ServiceHost?

Posted

技术标签:

【中文标题】WCF:啥是 ServiceHost?【英文标题】:WCF: What is a ServiceHost?WCF:什么是 ServiceHost? 【发布时间】:2010-10-23 09:44:44 【问题描述】:

由于我目前正在学习使用 WCF 服务,因此我经常在 Internet 上遇到教程,其中提到在使用 WCF 服务时使用 ServiceHost

这个ServiceHost到底是什么?


在我当前的项目中,我正在使用 WCF 服务并从我的应用程序中引用它,每当我想从我的应用程序中使用它时,我只需像这样实例化它的 ServiceClient

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

然后从该实例访问我的 Web 方法 (OperationContracts)(显然在使用方法之前打开它,然后使用 OpenClose 关闭它)

我的 WCF 服务托管在我的 IIS 中,我只需从我的应用程序访问 .svc 以实例化 ServiceClient

那么为什么使用ServiceHost 以及在哪里使用ServiceHost

【问题讨论】:

【参考方案1】:

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

【讨论】:

几乎正确 - 甚至 IIS 和 WAS 也会使用 ServiceHost 来托管您的 WCF 服务 - 他们只是创建它并在您背后自动将其拆除。 是的,我只是想描述一下您何时会在自己的代码中看到 ServiceHost。 IIS/WAS ServiceHost 通常不被开发人员直接访问。 是的,没错——ServiceHost 在 IIS/WAS 场景中几乎是不可见的 :) 我喜欢 MS 那个糟糕的页面“为服务提供主机”wtf。感谢微软。我在那个页面上什么都没学到。 您必须查看 MS 页面底部的备注和示例部分,这提供了比“为服务提供主机”更好的解释。【参考方案2】:

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

您可以自己在控制台应用程序、Windows 服务甚至 Winforms 应用程序中实例化 ServiceHost 类,从而使您的 WCF 服务类对外部世界可用 - 或者您可以将这项工作委托给 IIS 或 WAS。甚至 IIS 或 WAS 也会使用 ServiceHost 来托管您的 WCF 服务——它们只是在后台自动执行,并且“按需”——只要有对您的 WCF 服务的请求。

马克

【讨论】:

您是否会在 TDD 测试中使用它来测试调用,例如将特定标头或数据发送到 http 请求 (WebOperationContext) 到 wcf 服务方法?

以上是关于WCF:啥是 ServiceHost?的主要内容,如果未能解决你的问题,请参考以下文章

WCF项目问题1-找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/ser

找不到 WCF 数据服务类型

WCF:如何从 ServiceHost 获取端点列表?

WCF,找不到 ServiceHost 指令中的服务属性值

WCF ServiceHost.Close() 延迟

WCF ServiceHost回调不稳定