通道工厂

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 示例的一次性安装过程

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

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

跨计算机运行示例

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

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