如何:在托管应用程序中承载 WCF 服务
若要在托管应用程序内承载某个服务,应在托管应用程序内嵌入该服务的代码,在代码中强制定义或通过配置以声明的方式该服务的终结点,然后创建 ServiceHost 的实例。
若要开始接收消息,请调用 ServiceHost 上的 Open。这样即可创建并打开服务的侦听器。以这种方式承载服务的做法通常称为“自承载”,原因是托管的应用程序会自己处理承载工作。若要关闭服务,请调用 ServiceHost 上的 System.ServiceModel.Channels.CommunicationObject.Close。
在托管的 Windows 服务中、在 Internet 信息服务 (IIS) 中或在 Windows 进程激活服务 (WAS) 中也可以承载服务。有关 服务的承载选项的更多信息,请参见承载服务。
在托管应用程序中承载服务是一个非常灵活的选项,因为这种做法在部署时所需的基础结构最少。有关 在托管应用程序中承载服务的更多信息,请参见在托管应用程序中承载。
下面的过程演示如何在控制台应用程序中实现自承载的服务。有关此过程基于的工作示例,请参见Self Host Sample。
创建自承载服务
通过配置定义服务的服务终结点。
为服务创建一个接口。请参见如何:定义 Windows Communication Foundation 服务协定。
实现该接口以创建服务类型。请参见如何:实现 Windows Communication Foundation 服务协定。在下面的示例中,该实现的名称为
MathService
。创建一个方法以启动服务。在此示例中,将使用 Main 方法。
使用服务的基址创建 Uri 类的实例。本示例使用 ConfigurationManager 类的静态 AppSettings 属性来选择基址。确保在项目中添加对 System.Configuration.dll 的引用。然后可以在主机应用程序的配置文件中的 <appSettings> 元素下设置基址。
在应用程序的配置文件中,添加 <appSettings> 元素。然后将 <add> 元素与适当的 key 属性一起使用。在此情况下,key 值与在上一步骤中传递到 AppSettings 属性的参数相匹配。
创建 ServiceHost 类的实例,并将表示服务类型的 Type 和基址统一资源标识符 (URI) 传递到 ServiceHost。
在 ServiceHost 对象上调用 Open 方法。
在配置中创建终结点
- 将配置文件作为服务程序集添加到同一个目录。有关 配置的更多信息,请参见为 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