如何:在 WAS 中承载 WCF 服务
本主题概述了创建由 Windows 进程激活服务(也称为 WAS)承载的 Windows Communication Foundation (WCF) 服务所需的基本步骤。WAS 是一个新的进程激活服务,它是使用非 HTTP 传输协议的 Internet 信息服务 (IIS) 功能的一般化。WCF 使用侦听器适配器接口来传递通过 WCF 支持的非 HTTP 协定(例如,TCP、命名管道和消息队列)接收的激活请求。
此宿主选项要求正确安装和配置 WAS 激活组件,但不需要编写任何宿主代码作为应用程序的一部分。有关 安装和配置 WAS 的更多信息,请参见如何:安装和配置 WCF 激活组件。
在 WAS 中承载 WCF 服务时,可按照通常的方式使用标准绑定。但是,在使用 NetTcpBinding 和 NetNamedPipeBinding 配置 WAS 承载的服务时,必须满足一个约束条件。当不同的终结点使用相同的传输时,绑定设置必须在以下的七个属性上相匹配:
- ConnectionBufferSize
- ChannelInitializationTimeout
- MaxPendingConnections
- MaxOutputDelay
- MaxPendingAccepts
- ConnectionPoolSettings.IdleTimeout
- ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint
否则,最先初始化的终结点总是确定这些属性的值,并且以后添加的终结点若与这些设置不匹配,则将引发 ServiceActivationException。
有关此示例的源副本,请参见 TCP Activation。
创建 WAS 承载的基本服务
为该类型的服务定义服务协定。
在服务类中实现该服务协定。请注意,在服务的实现内部,未指定地址或绑定信息。而且,不必编写代码也可从配置文件中检索该信息。
创建一个 Web.config 文件来配置使用 NetTcpBinding 的 CalculatorService 的终结点。
创建包含以下代码行的 Service.svc 文件:
<%@ServiceHost language=c# Service="CalculatorService" %>
将 Service.svc 文件放到 IIS 虚拟目录中。
创建要使用服务的客户端
从命令行使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 以从服务元数据生成代码:
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
生成的客户端包含 ICalculator 接口,该接口定义了客户端实现必须满足的服务协定。
生成的客户端应用程序还包含 ClientCalculator 的实现。请注意,在服务的实现内部,未指定地址和绑定信息。而且,不必编写代码也可从配置文件中检索该信息。
使用 NetTcpBinding 的客户端配置也通过 Svcutil.exe 生成。在使用 Visual Studio 时,应在 App.config 文件中命名此文件。
在应用程序中创建 ClientCalculator 的实例,然后调用服务操作。
编译并运行客户端。