WCF程序中客户端要生成代理才能调用服务,在客户端生成代理有多种方式,如用ChannelFactory和添加服务引用等。下面就分别来介绍下这两种生成代理的方式。

使用ChannelFactory

使用ChannelFactory创建代理需要的条件

  • 服务端点的地址,即在宿主中用程序设置的或是配置文件中设置的。
  • 服务端点的绑定协议。
  • 服务契约的元数据,可以将服务契约复制一份到客户端或是在客户端添加对服务的引用。

下面的代码示例为通过ChannelFactory手动创建代理

EndpointAddress ea =
new EndpointAddress("http://localhost:10000/Service/HelloWorldService");
IHelloWorldService proxy =
ChannelFactory<IHelloWorldService>.CreateChannel(new BasicHttpBinding(),ea);
  • EndpointAddress:端点地址,该类的实例作为CreateChannel方法的一个参数,实例化EndpointAddress时给的地址要和宿主中设置的地址一致。
  • IHelloWorldService:这个是服务契约在客户端的一个副本,不包含具体的实现。
  • ChannelFactory:一个服务模型类型,可以产生客户代理和基础信道栈,使用该类的CreateChannel可以生成代理,有两个参数,绑定类型和端点地址,绑定类型和端点地址要和宿主中设置的一致。

添加服务引用的方式

1 在宿主的配置文件中配置元数据呢交换节点,并在行为中设置serviceMetadata,如下图:

2 在客户端添加服务引用时必须启动宿主。

3 配置文件设置好后,启动宿主,然后再客户项目上右击选择“Add Service Reference ”,在地址框中输入正确地址,如下图:

Http://localhost:10000/mex:是配置文件中的基地址http://localhost:10000加上端点地址mex组合而成。

oec2003:为服务契约中设置的属性Name的值,如下图:

HelloWorld:为自己定义的引用到客户端的名称。

4 添加服务引用后客户端的项目列表显示如下:

5 在客户端添加如下代码:

class Program
{
static void Main(string[] args)
{
HelloWorld.oec2003Client proxy = new Client.HelloWorld.oec2003Client();
Console.WriteLine(proxy.SayHello());
Console.ReadLine();
}
}

6 先运行宿主,然后运行客户程序就可以看到调用服务返回的结果。

 

【转】【WCF】WCF中客户端生成代理的两种方式的更多相关文章

  1. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  2. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  3. 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)

    在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...

  4. 在springboot中使用Mybatis Generator的两种方式

    介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...

  5. Eclipse中构建maven项目的两种方式

    Eclipse中构建maven项目的两种方式 方式一: 1.构建maven项目 1.1 新建meven项目,可在Other中找到maven文件夹 1.2 进入maven项目后,点击next 1.3 在 ...

  6. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  7. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  8. HTML中设置背景图的两种方式

    HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image ...

  9. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

随机推荐

  1. FFmpeg(11)-基于FFmpeg进行音频重采样(swr_init(), swr_convert())

    一.包含头文件和库文件 修改CMakeLists # swresample add_library(swresample SHARED IMPORTED) set_target_properties( ...

  2. 【小白的CFD之旅】19 来自计算网格的困惑

    经过一年的忙碌,终于又到了寒假时间,小白又满状态复活了. 这一年小白学了很多的课程,但是一年下来,小白却感觉脑袋里没留下什么东西,貌似什么东西都在考完试的那一刹那全还回给老师了.这一年学习之余,小白仍 ...

  3. A implementaion for 2D blue noise

    http://www.redblobgames.com/articles/noise/2d/

  4. 【web技术】html特效代码(二)

    html特效代码(一) html特效代码(二) 图片漂浮广告代码 <bodybgcolor="#F7F7F7"> <!--图片漂浮广告代码开始--> < ...

  5. 关于electron的跨域问题,有本地的图片的地址,访问不了本地的图片

    项目中有上传图片功能,自定义input type=file 改变透明度和超出部分隐藏,把按钮和 点击的图标放在上传文件的按钮上面,然后又碰到到获取input里面的图片的本地的路径, 在electron ...

  6. 如何添加查找 ng vue 客户端快捷方式

    1.查找文件的安装路径:右键: 2.然后resources里面的文件: 查看文件名的后缀: 3.asar -h 查找帮助 4.npm i asar -g 5.asar e app.asar rapp ...

  7. Eclipse - Mac Os Default JRE missing

    转:http://stackoverflow.com/questions/1736993/eclipse-mac-os-default-jre-missing 1) Follow Joshua's a ...

  8. 3. 支持向量机(SVM)拉格朗日对偶性(KKT)

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  9. 纯真ip导入mysql

    先从纯真官网右侧下载ip数据库 更新后,点击解压,可以把数据库保存为txt格式 格式化数据 ip格式如下图 可见并不是很规范,而且最底部字段数也不一致 先用正则表达式,查找替换一下 (\d+.\d+. ...

  10. [转]为Kindeditor控件添加图片自动上传功能

    原文地址:http://www.cnblogs.com/jaxu/p/3824583.html Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaSc ...