首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

完全不使用配置文件构建和使用WCF服务

  2、 客户端

  2.1. 引用service

  客户端要访问服务端的服务,首先要知道服务端的服务提供了什么方法,就是要知道服务的Contract.如何取得服务端的Contract有几种方法

  2.1.1. 直接把服务端的Contract的副本拷贝到客户端

  这个方法是最原始的一种方法,这样保证了服务端跟客户端使用同一份Contract.但是,这个方法不值得提倡,因为双方的Contract是同一个来源,但是毕竟是两个独立的物理存在,它们之间只能人为的来保证其一致性。

  2.1.2. 使用Svcutil.exe工具获得服务端Contract并生成本地服务代理类

  大家知道,web service是通过WSDL对外提供服务的描述,以便客户端能够通过wsdl知道这个web service所包含的方法、方法的签名等等信息,客户端通过wsdl就能知道怎么去调用这个web service.

  到了WCF时代,微软依然采用WSDL来提供对WCF服务的描述。

  前面服务端给ServiceHost添加了一个ServiceMetadataBehavior类型的Behavior,目的就是让服务端对外提供WSDL形式的服务Metadata描述。

  微软提供了Svcutil.exe工具用来通过WSDL生成客户端Contract和代理功能:

  Svcutil.exe httpbaseAddress

  httpbaseAddress 就是服务端设置的http的baseAddress.当然前提是服务端在ServiceHost. Behaviors添加一个ServiceMetadataBehavior类型的Behavior,并设置HttpGetEnabled属性为true,允许对外暴露服务端Metadata描述

  运行Svcutil.exe后,生成两个文件,一个是WCF配置文件,一个是包含了服务端Contract和对应于服务端service的本地代理类的cs文件。

  生成的cs文件有下面的规律:

  l 引用服务端的服务所涉及的Contract(Interface类型)基本都原样引用到客户端(可能会自动给Contract添加一些Attribute)。

  l 服务端的Endpoint到了客户端,每个具有不同Contract的Endpoint都会在客户端生成一个代理类。Contract相同,binding不同的Endpoint使用同一个客户端代理类。

  2.1.3. 在客户端项目中添加Service reference

  在vs2005中安装了WCF的extention后,在项目的References上点击右键,会多出来一个“Add Service Reference”的选项,这就是用来引用WCF服务的,引用地址就是服务端设置的http的baseAddress.

  在这里引用WCF服务,跟使用Svcutil.exe命令一样,会在项目中生成同样的两个文件。

  2.2. 生成客户端service代理实例

  引用服务后,客户端生成了配置文件和包含了Contract和本地代理类的cs文件,这里我们完全不使用配置文件,所以把生成的配置文件从项目中排除。

  2.2.1. 使用ChannelFactory Generic

  使用ChannelFactory Generic类的CreateChannel静态方法CreateChannel,返回一个客户端代理。

  static TChannel CreateChannel(Binding binding, EndpointAddress endpointAddress);

  localhost.IService proxy = ChannelFactory.CreateChannel(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/WCFService/Service"));

  这个方法包含了一个Endpoint的ABC三个主要元素:

  Address – new EndpointAddress("http://localhost:8080/WCFService/Service")是地址。

  Bingding – new BasicHttpBinding() 是绑定。

  Contract —— localhost. IService是引用服务后在在客户端生成的来自服务端的Contract(interface类型)。

  2.2.2. 直接使用引用服务后形成的本地代理类

  上面使用ChannelFactory的CreateChannel静态方法建立代理只使用到了引用WCF服务后在客户端生成的Contract,同时前面也说过,引用WCF服务后,还会在同时给每个Contract不同的Endpoint生成一个继承自System.ServiceModel.ClientBase的本地代理类。

  客户端可以直接使用多个重载的代理类构造方法实例化这些代理类。如果不使用配置文件,使用这个构造方法:

  SecondServiceClient(Binding binding, EndpointAddress remoteAddress)

  其中SecondServiceClient为本地的一个代理类。实例化一个代理类的代码是这样的:

  localhost.ServiceClient proxy = new localhost.ServiceClient(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/WCFService/Service"));

  同样,实例化的proxy也包含了一个Endpoint的ABC三个主要元素:

  Address – new EndpointAddress("http://localhost:8080/WCFService/Service")是地址。

  Bingding – new BasicHttpBinding() 是绑定。

  Contract –localhost.ServiceClient本身就是继承自某一个Contract的

  2.3. 使用代理实例的方法

  有了WCF的本地代理类实例,就可以使用服务提供的方法了。

  string result = proxy.MyOperation1("myFirstWCF");

上一页  [1] [2] [3] 

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航