WCF如何通过契约加编码方式调用
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如何通过契约加编码方式调用相关推荐
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
- C/C++中调用api设置mysql连接的编码方式
MySQL在C/C++中调用api设置连接mysql的编码方式有以下几种方法: 1. mysqli_set_charset 调用示例: [cpp] view plain copy ret = mysq ...
- BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式
BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式 BizTalk Server 2006 ...
- WCF 基础之契约(Contract)[转]
1. WCF 基础之契约(Contract) 契约(Contract)是 WCF 的消息标准,告知客户端如何与服务器联系交互.契约是平台中立的,也就说我们可以使用其它平台(包括开发和系统平台)来调用服 ...
- WCF学习(2)- 契约
(原创:灰灰虫的家http://hi.baidu.com/grayworm) 契约是WCF中很重要的概念.它是用一种与平台无关的标准语法来描述WCF服务的功能.当客户端获取服务端WCF服务的时候,会根 ...
- python ctypes库中动态链接库加载方式
最近看了<Gray hat python>一书,这才知道为什么python是黑客必学的编程语言.通过python的ctypes模块,可以直接调用动态链接库中的导出函数,而且甚至可以直接在p ...
- 使用chardet判断编码方式
1. chardet是什么 chardet是python中比较常用的一个编码方式检测库,需要注意的是它只检测并返回检测结果,并不负责对原数据做什么处理. 可以使用PIP命令安装: pip instal ...
- WCF编程系列(六)以编程方式配置终结点
WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来完成 ...
- BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)
BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...
最新文章
- 大厂项目是如何死掉的?太过真实!
- html 超链接 ppt,HTML超链接要点.ppt
- javascript onsubmit返回false仍然能提交_JavaScript对象-Get和Put
- java代码从编译到加载执行的过程
- 前端学习(1735):前端系列javascript之TypeScript介绍
- 当Python的lambda表达式遇上变量作用域
- 关于机器学习 Machine Learning中loss函数参数正则化的一点思考
- Security6:查看授予的权限
- 雷神笔记本关闭跳出垃圾游戏广告
- 矩阵分析之 实矩阵分解(3)Cholesky分解
- 官方win10安装教程,win10系统一键安装方法
- Python爬虫分析,全国结婚率连续5年下降,这届年轻人,为什么不敢结婚?
- 一、mybatis-generator
- Android使用RenderScript实现图片的高斯模糊效果
- 2013总结——告别页游,迎接手游
- ajax请求是宏任务还是微任务_微服务编排引擎Cadence简介
- 利用JavaAPI访问HDFS的文件
- 看完你也会,1w播放量收益就有137,总结的这个方法太管用了
- 什么是云计算,云计算的未来应用和前景?
- 素问之一上古天真论篇