23.2.3 构建统计与计算服务的客户端(1)
在服务器端构建完WCF服务之后,就可以在客户端调用这些服务了。客户端程序可以是网页或Forms应用程序。本节将以ASP.NET创建的网页调用WCF服务为例,讲解在客户端调用WCF服务的实现方法。
(1)在当前的解决方案中,新建一个Web应用程序,命名为WcfServices。
(2)打开默认生成的Web.config文件,在该文件中配置客户端配置需要调用服务的ABC。在Web.config文件的configuration节点下,添加如下配置代码。
- <system.serviceModel>
- <client>
- <endpoint address=http://localhost:8731/Design_Time_Addresses/WcfSer- viceLibrary1/Service1/
- binding="wsHttpBinding"
- contract="WcfServiceLibrary1.IService1">
- endpoint>
- client>
- system.serviceModel>
注意:这里的ABC属性要与WCF服务中App.config配置文件的内容对应起来。
(3)右击Web项目名称,在弹出的快捷菜单中选择“添加引用”命令,如图23.6所示。
(4)随后将弹出“添加引用”对话框,在该对话框中选择“浏览”标签,进入“浏览”选项卡。在其中选择前面章节中编译生成的WCF服务文件WcfServices.dll,如图23.7所示。单击“确定”按钮将WcfServices.dll文件引用到Web项目中。
图23.6 引用WCF服务 |
图23.7 “添加引用”对话框 |
注意:如果当前项目中没有引用System.ServiceModel命名空间,则还需要在“添加引用”对话框中将其引用到当前项目中。
(5)在Web项目的根目录下,添加一个名称为CalculatorClient.cs的类。在该类中添加创建一个代理接口和通信通道的程序代码,添加代码后CalculatorClient.cs类中的程序代码如下:
- using System;
- using System.Data;
- using System.Configuration;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.ServiceModel;
- namespace CalServices
- {
- //创建可调用服务的WCF客户端对象
- public partial class CalculatorClient : System.ServiceModel.ClientBase
- <WcfServiceLibrary1.IService1>, WcfServiceLibrary1.IService1
- {
- public CalculatorClient()
- { }
- //使用应用程序配置文件中有 endpointConfigurationName 指定的配置信息来初始化 ClientBase<TChannel>类的新实例
- public CalculatorClient(string endpointConfigurationName)
- : base(endpointConfigurationName)
- { }
- //使用指定的目标地址和终结点信息初始化 ClientBase<TChannel>类的新实例
- public CalculatorClient(string endpointConfigurationName, EndpointAddress remoteAddress)
- : base(endpointConfigurationName, remoteAddress) {}
- //实现加法操作
- public double Add(double n1, double n2)
- {
- return base.Channel.Add(n1, n2); //获取用于与服务通信的内部通道(实现加法操作)
- }
- //实现减法操作
- public double Subtract(double n1, double n2)
- {
- return base.Channel.Subtract(n1, n2); //获取用于与服务通信的内部通道(实现减法操作)
- }
- //实现乘法操作
- public double Multiply(double n1, double n2)
- {
- return base.Channel.Multiply(n1, n2); //获取用于与服务通信的内部通道(实现乘法操作)
- }
- //实现除法操作
- public double Divide(double n1, double n2)
- {
- return base.Channel.Divide(n1, n2); //获取用于与服务通信的内部通道(实现除法操作)
- }
- //实现百分比操作
- public double Percent(double n1, double n2)
- {
- return base.Channel.Divide(n1, n2); //获取用于与服务通信的内部通道(实现百分比操作)
- }
- }
- }