如何:在托管应用程序中承载 WCF 服务

若要在托管应用程序内承载某个服务,应在托管应用程序内嵌入该服务的代码,在代码中强制定义或通过配置以声明的方式该服务的终结点,然后创建 ServiceHost 的实例。

若要开始接收消息,请调用 ServiceHost 上的 Open。这样即可创建并打开服务的侦听器。以这种方式承载服务的做法通常称为“自承载”,原因是托管的应用程序会自己处理承载工作。若要关闭服务,请调用 ServiceHost 上的 System.ServiceModel.Channels.CommunicationObject.Close

在托管的 Windows 服务中、在 Internet 信息服务 (IIS) 中或在 Windows 进程激活服务 (WAS) 中也可以承载服务。有关 服务的承载选项的更多信息,请参见承载服务

在托管应用程序中承载服务是一个非常灵活的选项,因为这种做法在部署时所需的基础结构最少。有关 在托管应用程序中承载服务的更多信息,请参见在托管应用程序中承载

下面的过程演示如何在控制台应用程序中实现自承载的服务。有关此过程基于的工作示例,请参见Self Host Sample

创建自承载服务

  1. 通过配置定义服务的服务终结点。

  2. 为服务创建一个接口。请参见如何:定义 Windows Communication Foundation 服务协定

  3. 实现该接口以创建服务类型。请参见如何:实现 Windows Communication Foundation 服务协定。在下面的示例中,该实现的名称为 MathService

  4. 创建一个方法以启动服务。在此示例中,将使用 Main 方法。

  5. 使用服务的基址创建 Uri 类的实例。本示例使用 ConfigurationManager 类的静态 AppSettings 属性来选择基址。确保在项目中添加对 System.Configuration.dll 的引用。然后可以在主机应用程序的配置文件中的 <appSettings> 元素下设置基址。

  6. 在应用程序的配置文件中,添加 <appSettings> 元素。然后将 <add> 元素与适当的 key 属性一起使用。在此情况下,key 值与在上一步骤中传递到 AppSettings 属性的参数相匹配。

  7. 创建 ServiceHost 类的实例,并将表示服务类型的 Type 和基址统一资源标识符 (URI) 传递到 ServiceHost

  8. ServiceHost 对象上调用 Open 方法。

在配置中创建终结点

  1. 将配置文件作为服务程序集添加到同一个目录。有关 配置的更多信息,请参见为 Windows Communication Foundation 服务配置绑定

示例

下面的示例创建 ServiceHost 对象以承载 CalculatorService 类型的服务,然后调用 ServiceHost 上的 Open 方法。在代码中提供基址,而在配置中提供相对路径。

若要使用 ServiceMetadata Utility Tool (svcutil.exe) 创建服务的客户端,终结点的绑定必须使用 HTTP 协议。有关 绑定的更多信息,请参见使用绑定配置服务和客户端系统提供的绑定。有关本主题基于的完整示例,请参见Self-Host示例。

另请参见

任务

如何:在 IIS 中承载 WCF 服务
如何:定义 Windows Communication Foundation 服务协定
如何:实现 Windows Communication Foundation 服务协定

参考

Uri
AppSettings
ConfigurationManager

概念

承载服务
使用绑定配置服务和客户端
系统提供的绑定

其他资源

Self Host
Service Metadata Utility Tool (svcutil.exe)