通道工厂

ChannelFactory 示例演示了客户端应用程序如何使用ChannelFactory类而不是生成的客户端来创建通道。 此示例基于《入门指南》,实现了计算器服务。

注释

本示例的设置过程和生成说明位于本主题末尾。

此示例使用 ChannelFactory<TChannel> 类创建服务终结点的通道。 通常,若要创建指向服务终结点的通道,请使用 ServiceModel 元数据实用工具工具(Svcutil.exe) 生成客户端类型,并创建生成的类型的实例。 还可以使用 ChannelFactory<TChannel> 类创建通道,如此示例所示。 以下示例代码创建的服务与 入门中的服务相同。

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
                    ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();

重要

如果在跨计算机方案中运行此示例,则必须将上述代码中的“localhost”替换为运行服务的计算机的完全限定名称。 此示例不使用配置来设置终结点地址,因此必须在代码中完成此作。

创建通道后,可以像使用生成的客户端一样调用服务作。

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

若要关闭通道,必须先将通道转换为 IClientChannel 接口。 这是因为生成的通道是使用 ICalculator 接口在客户端应用程序中声明的,该接口具有类似 AddSubtract 没有 Close的方法。 该方法 Close 源自 ICommunicationObject 接口。

// Close the channel.
 ((IClientChannel)client).Close();

运行示例时,操作请求和响应将显示在客户端控制台窗口中。 在客户端窗口中按 Enter 关闭客户端应用程序。

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

设置、生成和运行示例

  1. 确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。

  2. 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。 请注意,此示例不启用元数据发布。 必须先为此示例启用元数据发布才能重新生成客户端类型。

  3. 若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。

跨计算机运行示例

将以下代码中的“localhost”替换为运行服务的计算机的完全限定名称。

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");