首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《WCF技术剖析》博文系列汇总

不过,一改传统对WCF的工作流程进行平铺直叙,我将另辟蹊径,借助于我们熟悉的ASP.NET作为请求处理平台,通过一个简单的托管程序模拟整个WCF客户端和服务端的架构。源代码从这里下载。...但是,是否直接调用ICommunicationObject的Close方法将服务代理关闭就万事大吉了呢?事情远不会这么简单,这其中还会涉及关于异常处理的一些操作,这就是本篇文章需要讨论的话题。...[第12篇] 数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) 大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理...[第14篇] 泛型数据契约和集合数据契约[上篇][下篇] 在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。...所以对于一般的编程人员来说,他们面对的是接口,却不知道服务契约对于服务的描述;面对的是数据类型,却不知道数据契约对序列化的作用;面对的是方法调用和返回值的获取,却不了解底层消息交换的过程。

1.4K100

WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

现在我们要做的是将一个Contact对象序列化成基于Customer数据契约对应的结构的XML,或者对于一段基于Customer数据契约对应结构的XML,将其反序列化生成Contact对象。...IDataContractSurrogate用于实现在序列化、反序列化、数据契约的导入和导出过程中对对象或者类型的替换。...我们先来看看IDataContractSurrogate的定义,序列化相关的方法有以下3个,如果想具体了解IDataContractSurrogate在数据契约导入、导出,以及代码生成方面的应用可以参考...GetDataContractType:获取进行序列化、反序列化或者数据契约导入导出基于的数据契约的类型,实现此方法相当于实现了类型的替换; GetObjectToSerialize:在序列化之前获取序列化的对象...WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制 WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?

80780
您找到你想要的搜索结果了吗?
是的
没有找到

WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)

在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。序列化依赖于真实具体的类型,而泛型则刻意模糊了具体类型概念。...上篇先来说所泛型数据契约。 一、泛型与数据契约 面向对象通过继承实现了代码的重用,而泛型则实现了“算法的重用”。...而我们现在介绍的数据契约,则属于面向服务的概念。两者具有一些冲突 ,比如面常服务没有继承、重载的概念一样,面向服务同样也无法理解泛型。...我们现在就来看看WCF做了些什么使我们能够以泛型类型的形式来定义数据契约。...WCF在进行元数据发布的时候,会自动按照这样的命名机制创建数据契约,并以XSD的形式发布出来。所以当客户端导入元数据生成客户端代码的时候,生成的等效数据契约的类型名称就是这个经过拼接的名称。

1.2K90

我的WCF之旅(3):在WCF中实现双工通信

回调契约的类型通过ServiceContractAttribute特性的CallbackContract属性进行指定。 上面代码中服务契约ICalculator的回调契约ICallback定义如下。...在客户端程序为回调契约提供实现,在下面的代码中CalculateCallback实现了回调契约ICallback,在DisplayResult方法中对运算结果进行输出。...在上面给出的客户端代码中,在调用了Add方法后添加了这样的语句“Console.Read();”,这是为了阻止调用proxy的Dispose方法,因为该方法将会试图关闭底层的TCP连接。...现在我们修改一下回调契约,将OperationContractAttribute的IsOneWay属性去掉,将Add操作由单向操作改成传统意义的请求-回复服务操作。...为了保证回调的正常运行,在客户端创建通道的时候(比如上面的代码通过DuplexChannelFactory的CreateChannel方法的时候),会进行回调服务的寄宿,并指定回调服务的监听地址。

1K100

一周技术思考(第17期)-废墟的召唤

不然,那些坏代码不就真的堆成废墟了吗。 在结束这部分内容之前,再最后“加个当然”。当然,一个应用的质量也不能是仅仅归结到代码质量的问题上来。...有改变坏代码的勇气固然重要,也是必要,但同时呢,现在是一个多方协同合作的过程,这中间还需要有一种契约精神,接下来,就让我看看程序中的契约是怎么回事。...程序中间的“契约精神” 方法方法之间,类与类之间,服务与服务之间,实际上是存在着某种契约的。所谓的契约,就是双方要遵守的合同,更准确点说就一旦一方毁约,另一方就会收到影响,甚至是损伤。...来源:Applied Software Measurement by Capers Jones(McGraw-Hill,1996) 什么是契约 What,又来,上面不是讲过了吗。...其实,有个原则可以帮助我们,忘记了“单一职责原则”了吗

25020

WinForm企业应用框架设计【一】界限划分与动态创建WCF服务(no svc!no serviceActivations!)

顺便问一下haibindev 您的《c# 实现p2p文件分享与传输系统》 完结了吗?...2011-11-30 23.00.00修改】 【上面的代码2011-12-03 23.34.00修改】 好吧,我承认这是动态注册WCF服务的核心代码 想动态创建WCF服务ServiceHostFactory...在这个代码中,我们约定以Service结尾的类型就是WCF服务类型 亲~这是约定优于配置的原则哦~ 当然我们应该为特例留下生存空间,我这里没有做,亲,你自己实现吧 这虽然是核心代码,但没有配置文件也是不行的...兼容模式下运行 基于IIS的WCF有两种模式,一种是ASP.NET并行,一种是ASP.NET兼容; 这些内容超出了咱们这篇文章的范畴了~就不多说了 ServiceBehavior的属性要求把错误发送给客户端...MenuModel> GetAllMenu(); [OperationContract] bool EditMenu(MenuModel target); } 服务契约和操作契约的属性标记一如往常

55240

Laravel 非常规教程之1 生命周期

上一节老高零(瞎)散(扯)的讲了一下laravel的基本知识,不知道你现在搞清楚symfony vs laravel的关系了吗?...); app.php 略过自动加载,我们现在看看bootstrap/app.php文件。...ApplicationContract, HttpKernelInterface # Application直接继承了Container,并实现了ApplicationContract, HttpKernelInterface两个契约...这个share值会影响make的时候的某一步逻辑,具体代码如下,针对singleton的实例化之后会被$app缓存起来,提高了性能,而通过bind方法绑定的类被实例化时每次返回的都是不同的对象。...this->instances[$abstract] = $object; } 对bind和make的逻辑不清楚的同学可以参考一下laravel的启动过程中服务容器——laravel真正的核心一节

49620

WCF学习笔记 1

WCF为.Net Framework提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。 WCF的设计遵循的是面向服务的原则。 服务是指可以通过消息与之进行交互的一段代码。...数据契约:服务中的参数; 消息契约:使用SOAP协议特定的消息部分; 服务契约:服务中的方法; 策略与绑定:策略设置安全或其他条件,绑定指定传输方式与编码。...契约(Contract) WCF的基本概念是以合约(Contract)来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。...元数据 所谓的“元数据”就是描述数据的数据,即描述当前服务有哪些服务契约方法契约和数据契约以及终结点的信息。而“元数据终结点”就是向外界暴露元数据的终结点。...WCF:其实一定程度上就是一个特殊的ASP.NET WebService,因为它支持Web Service的行业标准和核心协议,因此ASP.NET WebService和WSE能做的事情,它几乎都能胜任

89540

帮助页面与自动消息格式(JSONXML)选择

可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehavior...在默认的情况下,帮助页面中表示操作描述信息的格式为“Service at {操作地址}”,我们可以在定义服务契约的时候再操作方法上应用特性DescriptionAttribute来定义出现在帮助页面中的描述信息...,我们在契约接口IEmployees中的所有操作方法上应用了DescriptionAttribute特性并指定了相应的描述信息。...这些描述信息就是出现在如下图所示的帮助页面中。 ? 二、 自动消息格式选择 REST服务具有两种基本的消息格式(Xml和Json)。...在定义服务契约的时候,我们可以通过应用在操作方法上的WebGetAttribute和WebInvokeAttribute指定回复消息的格式。

68470

Mono 3.0.2 基于双工通信的WCF应用 Demo

双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息。基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合。...回调契约的类型通过ServiceContractAttribute特性的CallbackContract属性进行指定。 上面代码中服务契约ICalculator的回调契约ICallback定义如下。...在WCF中,回调对象通过当前OperationContext的GetCallback方法获得(T代表回调契约的类型)。 ?...具体可以参看 WCF置于Mono下遇到的一些问题 在MONO下实现WCF所遇到的问题 步骤四:实现回调契约 在客户端程序为回调契约提供实现,在下面的代码中CalculateCallback实现了回调契约...ICallback,在DisplayResult方法中对运算结果进行输出。

74760

WCF系列教程之WCF服务宿主与WCF服务部署

然后创建 ServiceHost,在被重写的 OnStart(String[]) 方法内打开它并在被重写的 OnStop() 方法关闭它。...(3)、net.pipe (4)、net.msmq 3.3、进程和AppDomain回收 不会被回收,除非手动关闭服务 4、托管Windows服务代码示例 第一步:创建服务契约层IService(类库...),在新建两个契约接口ICalculate和IMessage,具体代码如下: ICalculate.cs using System; using System.Collections.Generic;...通讯,启用net.tcp通讯就必须依靠Windows 进程激活服务(也称为 WAS)在控制面板->程序和功能->打开或关闭windows功能勾选以下几个功能,安装WCF 激活组件 ?...ServiceMessage用于Http通讯,一个是ServiceCalculator用于net.tcp通讯,Web.config文件代码如下: <?

1.2K80

WCF简单教程(3) 试着去掉配置文件

第三篇:试着去掉配置文件 通过配置文件来设置Host、Endpoint、Binding等是WCF中推荐的方法,这样可以使发布尽量灵活。...其实配置文件中的值,最终还是要体现到代码中的,只不过这部分工作由底层帮你做了。我们今天来尝试去掉配置文件,用纯代码实现发布过程,同时加深一下对层次关系的理解。...             Uri httpAddress = new Uri("http://localhost:8080/wcf");             Uri tcpAddress = new Uri("net.tcp...= new ChannelFactory(httpBinding, httpAddr).CreateChannel();              //调用SayHello方法关闭连接...Binding tcpBinding = new NetTcpBinding();             EndpointAddress tcpAddr = new EndpointAddress("net.tcp

47710

WCF技术剖析(卷1)之目录

(Message Contract)            6.3.1  消息契约的定义            6.3.2  案例演示6-2:基于消息契约方法调用是如何格式化成消息的?       ...ServiceHost     7.4  通过IIS进行服务寄宿            7.4.1  案例演示7-2:如何通过IIS进行服务寄宿            7.4.2  IIS管道与ASP.NET...架构            7.4.3  IIS服务寄宿实现详解            7.4.4  案例演示7-3:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务           ...简介            8.3.2  ChannelFactory的缓存机制        8.4  基于会话信道的客户端            8.4.1  服务契约关闭与并发会话的限制...            8.4.2  会话信道与异常处理            8.4.3  案例演示8-3:通过AOP的方式解决会话信道的关闭与中断            8.4.4  额外的思考

91590

WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制

(通过代码指定或者配置)创建ChannelFactory对象,并借助该对象直接进行服务代理的创建。...注:部分内容节选自《WCF技术剖析(卷1)》第八章:客户端(Clients) WCF技术剖析系列: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF技术剖析之二:再谈IIS与ASP.NET...WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制 WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?...(Data Contract)和数据契约序列化器(DataContractSerializer) WCF技术剖析之十三:序列化过程中的已知类型(Known Type) WCF技术剖析之十四:泛型数据契约和集合数据契约...(上篇) WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 WCF技术剖析之十六:数据契约的等效性和版本控制

883110

C#.NET 中的契约

微软从 .NET Framework 4.0 开始,增加了 System.Diagnostics.Contracts 命名空间,用来把契约文档融入代码。...---- 契约式编程 当你调用某个类库里面的方法时,你如何能够知道传入的参数是否符合规范?如何能够知道方法调用结束之后是否要对结果进行判断?...几种不同的契约方法 ReSharper Annotations ReSharper 并没有将其称之为“契约”,因为它真的只是“文档级别”的约束,只会在写代码的时候具备一定程度的静态分析能力以便给出提示,...// * 操作执行完后一定满足某组条件(Ensures,EnsuresOnThrows) } 以上代码中,星号(*)表示契约代码,其他表示方法内的普通代码。...---- 参考资料 Code Contracts - Microsoft Docs .NET 4.0 中的契约式编程 - Angel Lucifer - 博客园 C# 中参数验证方式的演变 -.net-

88110

初识华为开源项目 ServiceComb

摘要 本文将向介绍ServiceComb开源项目的整体架构及特点、ServiceComb Release 0.3.0的增强功能、基于ServiceComb介绍参与软件开源开发的途径和方法。...上图是ServiceComb的架构图,ServiceComb运行时包含了两部分核心模块。...一部分是服务契约,这是基于Open API实现的针对Restful服务的标准描述信息,这些信息是独立与具体语言的。服务契约是ServiceComb很重要的一个核心特点。...这样带来最大的好处就是代码和文档可以一致化,同时这些契约可以对每个服务都做一个比较明确的能力限定,可以更好地帮助我们来协调和管理服务之间的调用。 服务契约定义 ?...; 契约定义为语言中立,可以通过相关的工具生成不同语言的服务桩代码或者是调用代码; 借助相关接口工具,可以根据服务接口代码自动生成API描述文档,让实现代码与文档的同步; ?

1.4K60

《WCF服务编程》关于“队列服务”一个值得商榷的地方

为了模拟一个服务的多个总结点共享相同消息队列的场景,我建立了一个实现了多个服务契约接口的服务GreetingService,它实现了两个服务契约接口:IHello和IGoodbye。...这三个类型的定义如下面的代码片断所示。...ServiceHost(typeof(GreetingService))) 7: { 8: host.Open(); 9: Console.Read(); 10: } 现在我们编写代码分别针对这两个终结点发起服务调用...16: 17: 18: 然后在服务寄宿的时候,确认服务开启之前和关闭之后消息队列中具有的消息数量...由于服务只有一个终结点,所以它只能处理针对IHello契约的调用的消息。我们现在需要确定的是:“客户端针对IGoodbye契约发送的请求消息还会在消息队列里面吗?”。

61280

细说API - 文档和前后端协作

在上一篇文章——《细说API - 重新认识RESTful》中介绍了如何理解和设计RESTful风格的API,现在我们来聊聊如何有效的呈现API文档,以及前后端协作的方式。...这种方案适合强类型语言例如 Java、.Net,尤其是生成一份稳定、能在团队外使用的 API 文档。...原理为解析方法前面的注释,使用方法非常类似 javadoc 等程序接口文档生成工具,配置和使用都非常简单。因为只是解析代码注释部分,理论上和编程语言无关。...不过如果你使用的是 Java、.Net 等强类型语言,就可以利用强类型语言的优势。...实际工作中,退一步说,制定好契约就可以完成基本的开发工作,对契约测试、验证可以让前后端协作变得更为可靠。如果你现在还没准备好使用契约测试的话,也不必焦虑,手动定义契约可以让前后端协作先运行起来。

1.2K30
领券