[转]WCF生成客户端对象方式解析
来源:互联网 发布:淘宝店卖家页面图片 编辑:程序博客网 时间:2024/04/30 13:15
在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为:
1. 代理构造法
2. 通道工厂法
本文会从实际应用的角度上,阐述两种方法的一些细节和优劣对比,希望通过学习本文,能掌握什么情况下使用什么样的方式来创建客户端服务代理对象,怎样创建客户端代理对象。本文重点在术,非道。
构造代理法
从名字中可以看出,使用本方法创建客户端服务代理对象,是调用了服务代理类的构造方法。这种方法非常符合创建对象的常规方法:通过new的方式产生类型实例。可在WCF中要使用此方法,却是需要一个前提:要首先具备代理类。所以产生代理类便是此种方法首先要解决的问题了,下面就来看下WCF中创建代理类的几种常见办法。
在WCF中,创建代理类,可以分为下面的几种情况:
第一种:知道服务元数据地址,通过在项目中添加服务引用。
第二种:知道服务元数据地址,通过svcutil.exe生成代理类和配置文件。
第三种:从服务契约所在的的程序集(dll,exe)中导出元数据,然后从本地元数据生成代理类。(没有示例) //这俩种方法都很简单大家自己试一下就可以了
第四种:知道元数据的地址,通过自定义的代码生成代理类。 (没有示例)
下面分别详细的阐述四种方法的操作过程
第一种:知道服务元数据地址,通过在项目中添加服务引用。
这种方法非常适合初学者,生成代理类的难度基本为0,也是这几种生成方式中最为简单的。但前提必须事先知道元数据的发布地址。下面是操作过程:
在项目中单击右键,选择添加服务引用出现如下的对话框
一般情况下,填写完下面的对话框就可以点击确定,生成代理类了,但有的时候,我们需要对代理类对特殊的设置,比如我们要生成异步操作,要更改字典集合为数组等,这时候可以点击上图中左下角的高级按钮。出现如下的对话框:
经过上面的处理,就能生成代理类了,但是通过此种方法产生代理类存在一个问题,这个问题和WCF联系不大,但还是比较重要的,比如服务端是java开发的,且采用的Soap1.1协议,那么采用上面这种方法,将无法产生匹配soap1.1的代理类,导致在调用服务的时候,出现如下的异常:
SOAP版本可能不匹配: 出现意外的 Envelope 命名空间 http://schemas.xmlsoap.org/wsdl/。应为http://schemas.xmlsoap.org/soap/envelope/。
这个是我在xml web service中的添加服务中发现的,新版本的添加服务引用仍热没有指定协议的设置。在xml webservice中,解决上面问题的办法是采用wsdl.exe,然后指定参数/protocol:SOAP
第二种:知道服务元数据地址,通过svcutil.exe生成代理类和配置文件。
在WCF中的工具中Svcutil.exe是一个非常重要的工具,使用它,我们可以导出,导入,下载元数据,生成代理类,验证编译好的代理。如果我们已经知道元数据的发布地址,那么通过下面的操作,可以生成代理类
打开vs2008或vs2010的命令行工具
Svcutil支持不同类型的元数据地址,如net.tcp://,http://等。下面分别进行演示:
元数据地址是net.tcp://格式:
svcutilnet.tcp://127.0.0.1:3333/Service/MEX /language:cs/out:ChatProxy.cs
元数据地址格式是http://格式 生成代理类的过程和上图类似,不再添加注释。
svcutilhttp://127.0.0.1:6548/Service/MEX /language:cs/out:Proxy.cs
- [转]WCF生成客户端对象方式解析
- WCF生成客户端对象方式解析
- WCF生成客户端对象方式解析
- WCF生成客户端对象方式解析
- WCF生成客户端对象方式解析
- WCF读取配置动态生成客户端对象
- WCF中客户端生成代理的两种方式
- wcf 生成客户端脚本
- 生成wcf客户端脚本
- 根据服务元数据生成 WCF 客户端(转自MSDN)
- WcF生成客户端遇到的问题/
- Wcf 客户端代理生成 通过SvcUtil.exe
- WCF学习心得----(四)生成客户端
- 从零开始学WCF(5)生成客户端
- WCF学习心得----(五)生成客户端
- WCF服务生成客户端的配置文件步骤
- WCF客户端调用的几种方式
- WCF客户端编程-基于服务引用方式
- win7/win8下 cocos2d-x-3.2 Android 移植 环境搭建
- 杂碎知识记录
- VS2010快捷键
- MVC2.0 基础知识
- 我的博客今天1岁315天了,我领取了…
- [转]WCF生成客户端对象方式解析
- ASP.NET Global.asax详解
- 删除数据库重复数据
- 如何只备份一张表的数据
- 4个禁忌让你折寿20岁
- Html.ActionLink详解
- CSS 属性设置优先级问题
- POJ-2585 Window Pains
- XML中的转义字符