WCF采用基于契约的服务调用方法,通过System.ServiceModel.ChannelFactory<TChannel>直接创建服务代理对象。

创建服务代理

 public static T Create<T>(string endpointName){if (string.IsNullOrEmpty(endpointName)){#region 默认配置,根据类名,赋值endpointName#endregionthrow new ArgumentNullException("endpointName");}return (T)(new ServiceRealProxy<T>(endpointName).GetTransparentProxy());}

  public class ServiceRealProxy<T> : RealProxy{private readonly string _endpointName;public ServiceRealProxy(string endpointName): base(typeof(T)){if (string.IsNullOrEmpty(endpointName)){throw new ArgumentNullException("endpointName");}_endpointName = endpointName;}public override IMessage Invoke(IMessage msg){T channel = ChannelFactoryCreator.Create<T>(this._endpointName).CreateChannel();var methodCall = (IMethodCallMessage)msg;IMethodReturnMessage methodReturn = null;object[] copiedArgs = Array.CreateInstance(typeof(object), methodCall.Args.Length) as object[];methodCall.Args.CopyTo(copiedArgs, 0);try{object returnValue = methodCall.MethodBase.Invoke(channel, copiedArgs);methodReturn = new ReturnMessage(returnValue, copiedArgs, copiedArgs.Length, methodCall.LogicalCallContext, methodCall);var communicationObject = channel as ICommunicationObject;if (communicationObject != null) communicationObject.Close();}catch (Exception ex){if (ex.InnerException is CommunicationException || ex.InnerException is TimeoutException){var communicationObject = channel as ICommunicationObject;if (communicationObject != null) communicationObject.Abort();}methodReturn = ex.InnerException != null ? new ReturnMessage(ex.InnerException, methodCall) : new ReturnMessage(ex, methodCall);}return methodReturn;}}

转载于:https://www.cnblogs.com/kingCpp/p/4905247.html

WCF如何通过契约加编码方式调用相关推荐

  1. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  2. C/C++中调用api设置mysql连接的编码方式

    MySQL在C/C++中调用api设置连接mysql的编码方式有以下几种方法: 1. mysqli_set_charset 调用示例: [cpp] view plain copy ret = mysq ...

  3. BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式

    BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式 BizTalk Server 2006 ...

  4. WCF 基础之契约(Contract)[转]

    1. WCF 基础之契约(Contract) 契约(Contract)是 WCF 的消息标准,告知客户端如何与服务器联系交互.契约是平台中立的,也就说我们可以使用其它平台(包括开发和系统平台)来调用服 ...

  5. WCF学习(2)- 契约

    (原创:灰灰虫的家http://hi.baidu.com/grayworm) 契约是WCF中很重要的概念.它是用一种与平台无关的标准语法来描述WCF服务的功能.当客户端获取服务端WCF服务的时候,会根 ...

  6. python ctypes库中动态链接库加载方式

    最近看了<Gray hat python>一书,这才知道为什么python是黑客必学的编程语言.通过python的ctypes模块,可以直接调用动态链接库中的导出函数,而且甚至可以直接在p ...

  7. 使用chardet判断编码方式

    1. chardet是什么 chardet是python中比较常用的一个编码方式检测库,需要注意的是它只检测并返回检测结果,并不负责对原数据做什么处理. 可以使用PIP命令安装: pip instal ...

  8. WCF编程系列(六)以编程方式配置终结点

    WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来完成 ...

  9. BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)

    BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...

最新文章

  1. 大厂项目是如何死掉的?太过真实!
  2. html 超链接 ppt,HTML超链接要点.ppt
  3. javascript onsubmit返回false仍然能提交_JavaScript对象-Get和Put
  4. java代码从编译到加载执行的过程
  5. 前端学习(1735):前端系列javascript之TypeScript介绍
  6. 当Python的lambda表达式遇上变量作用域
  7. 关于机器学习 Machine Learning中loss函数参数正则化的一点思考
  8. Security6:查看授予的权限
  9. 雷神笔记本关闭跳出垃圾游戏广告
  10. 矩阵分析之 实矩阵分解(3)Cholesky分解
  11. 官方win10安装教程,win10系统一键安装方法
  12. Python爬虫分析,全国结婚率连续5年下降,这届年轻人,为什么不敢结婚?
  13. 一、mybatis-generator
  14. Android使用RenderScript实现图片的高斯模糊效果
  15. 2013总结——告别页游,迎接手游
  16. ajax请求是宏任务还是微任务_微服务编排引擎Cadence简介
  17. 利用JavaAPI访问HDFS的文件
  18. 看完你也会,1w播放量收益就有137,总结的这个方法太管用了
  19. 什么是云计算,云计算的未来应用和前景?
  20. 素问之一上古天真论篇

热门文章

  1. 3.4.4 选择重传协议(SR)
  2. FPGA和DSP间基于SRIO的高速通信系统设计
  3. 在VS2010/MFC中如何对对话框添加控件
  4. python建立访客记录
  5. 人工智能写的散文之白色月光下
  6. zabbix-2.4.8使用yum一键部署zabbix
  7. 常见拒绝服务攻击行为特征与防御方法
  8. 并查集 HDOJ 5441 Travel
  9. Hibernate笔记——9.关联映射(下)
  10. [CLR via C#]17. 委托