WCF之操作重载

  • 服务契约的方法重载,会在装载宿主时,抛出异常.
    • 解决是在操作契约上Name设置为不同值,但是生成的代理会把Name的名称作为方法的名称,不过我们可以手动的修改代理类,使得方法名与服务声明的名称一样.

  • 契约的继承: 服务契约是不可继承的.
    • 客户端在导入服务契约时,会取消服务契约的继承层级,并利用OperationContract特性中的Action与ReplyAction属性,保留原来定义每个操作的契约名。

    • 但为了使客户端编程能够与服务编程保持一致,最好是恢复客户端的契约层级。即根据服务契约层级对客户端契约进行手工修改.

  • 服务契约的分离和设计.
    • ISP原则建议使用多个专门的接口,而不是使用单个接口,这样可以防止接口污染,有利于接口重用.同理,合理的契约分解可以实现深度特化、松散耦合、精细调整以及契约的重用。这些优势有助于改善整个系统。

    • 总的来说,契约分解的目的就是使契约包含的操作尽可能少.

  • 设计面向服务的系统时,需要平衡两个影响系统的因素:一个是实现服务契约的代价,一个则是将服务契约合并或集成为一个高内聚应用程序的代价.

  • 准属性操作(Property-Like Operation)的使用.
    • 就是如果涉及到对对象状态的管理(在C#中一般体现为属性),则这样的操作不宜被公开为服务操作。原因在于:“客户端应该只负责调用操作,而由服务去管理服务对象的状态.

  • 契约查询: 首先要了解元数据的信息.

  • 面向对象有两个原则:依赖倒置原则强调的是实现依赖于抽象,抽象不依赖于实现 ,而Liskov原则强调的是子类必须可以替换其基类.

  • WCF通讯双方存在明显的边界.服务端所设定的契约关系层次和数据的继承关系不能强制的适用于客户端,这充分体现了面向服务的松散耦合的特征,虽然有悖于OO的设计原则,但也恰恰体现了面向服务的优点,且这种做法更适应变化.

  • 异步
    • WCF中实现异步是一件非常简单的事情,我们用svcutil来生成客户端代理代码的时候,只需添加/async 便可以生成有异步功能的代理类了.而在IDE中,操作就更加简单,就是在添加ServiceReference的时候,选择高级选项,钩选Generate Asynchronus operations.

    • 服务操作究竟是否采用异步方式,应该由客户端的调用者决定。因此,所有与异步调用相关的内容应该只与客户端相关。WCF遵循了这一规则。在客户端决定采用异步方式调用我所设计的服务操作时,虽然需要修改客户端的服务契约接口,但并不会影响服务端的契约定义。对于异步调用的完成,虽然WCF提供了诸如阻塞、等待和轮询等机制,但最好的方式还是使用回调。也就是利用Begin方法参数中的AsyncCallback对象。由于回调方法并非运行在主线程中,如果回调方法需要更新与异步调用结果相关的界面,例如本例中的lbMessage控件,则需要将回调的调用封送(Marshal)到当前主程序界面的同步上下文中。我们可以使用SynchronizationContext以及它的SendOrPostCallback委托,对调用进行封送.

WCF之操作重载,布布扣,bubuko.com

时间: 2024-12-15 11:28:39

WCF之操作重载的相关文章

WCF分布式开发步步为赢(5)服务契约与操作重载

继上一节WCF分布式开发步步为赢系列的(4):WCF服务可靠性传输配置与编程开发,本节我们继续学习WCF分布式开发步步为赢的第(5)节:服务契约与操作重载.这里我们首先讲解OOP面向对象的编程中方法重载,重载的意义,WCF服务编程开发如何实现操作重载,随后是代码分析部分,给出了服务端服务契约定义和实现操作重载的注意的问题和实现过程,然后详细介绍了客户端实现操作重载的方式.最后是本文的总结部分.本节的结构是:[1]重载概念[2]操作重载[3]代码实现分析[4]运行结果[5]总结 [1]重载概念:

重温WCF之构建一个简单的WCF(一)(2)通过Windows Service寄宿服务和WCF中实现操作重载

参考地址:http://www.cnblogs.com/zhili/p/4039111.html 一.如何在Windows Services中寄宿WCF服务 第一步:创建Windows 服务项目,具体添加步骤为右键解决方案->添加->新建项目,在已安装模板中选择Windows 服务模板,具体如下图示所示: 第二步:添加Windows服务之后,修改对应的Service1.cs文件 using System; using System.Collections.Generic; using Syst

C++ Primer学习总结 第14章 操作重载与类型转换

第14章 操作重载与类型转换 1.    可以直接调用重载的运算符函数. 但是如果对于一个运算符比如+号,既有重载的成员函数,又有重载的非成员函数,那么此时如果直接使用+号,那么就会出现错误. 因为编译器不知道要调用那个运算符. 2.     逗号,运算符 逻辑与&&运算符 逻辑或||运算符不建议重载. 因为上述3种运算符本身是有求值顺序和短路求值特性(&&和||有短路求值特性)的. 但是重载后的运算符本质上是一次函数调用, 所以求值顺序和短路求值特性都会消失. 注意上面第

WCF中操作的分界于调用顺序和会话的释放

操作分界 在WCF操作契约的设计中,有时会有一些调用顺序的业务,有的操作不能最先调用,有的操作必须最后调用,比如在从一个箱子里拿出一件东西的时候,必须先要执行打开箱子的操作,而关上箱子的操作应该在一切工作完成之后再被执行. public interface Box{    void Open(int boxId);    int GetTotalFrenchletter();    void Close();} 为了解决这种实际需求,WCF在OperationContractAttribute中

跟我一起学WCF(9)——WCF回调操作的实现

一.引言 在上一篇文章中介绍了WCF对Session的支持,在这篇文章中将详细介绍WCF支持的操作.在WCF中,除了支持经典的请求/应答模式外,还提供了对单向操作.双向回调操作模式的支持,此外还有流操作的支持.接下来将详细介绍下这几种操作,并实现一个双向回调操作的例子. 二.WCF操作详解 2.1 请求—应答操作 请求应答模式是WCF中默认的操作模式.请求应答模式指的是:客户端以消息形式发送请求,它会阻塞客户端直到收到应答消息.应答的默认超时时间为1分钟,如果超过这一时间服务仍然没有应答,客户端

跟我一起学WCF(5)——深入解析服务契约[上篇]

一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Contract又是终结点中比较重要的一个内容,在WCF中,契约包括服务契约.数据契约.消息契约和错误契约,在本篇博文将解析下数据契约的内容,关于其他三种契约将会后面的博文中陆续介绍. 二.引出问题——WCF操作重载限制 C#语言是支持操作重载的,然而在WCF实现操作重载有一定的限制.错误的操作重载实例:

WCF分布式开发步步为赢(10):请求应答(Request-Reply)、单向操作(One-Way)、回调操作(Call Back).

WCF除了支持经典的请求应答(Request-Reply)模式外,还提供了什么操作调用模式,他们有什么不同以及我们如何在开发中使用这些操作调用模式.今天本节文章里会详细介绍.WCF分布式开发步步为赢(10):请求应答(Request-Reply).单向操作(One-Way).回调操作(Call Back).本文结构:[1]请求应答(Request-Reply).[2]单向操作(One-Way).[3]回调操作(Call Back).[4]示例代码分析.[5]总结.最后上传本文的示例代码. WCF

跟我一起学WCF(6)——深入解析服务契约[下篇]

一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代理类的方式来实现的.在这篇博文中将分享契约继承的实现. 二.WCF服务契约继承实现的限制 首先,介绍下WCF中传统实现契约继承的一个方式,下面通过一个简单的WCF应用来看看不做任何修改的情况下是如何实现契约继承的.我们还是按照之前的步骤来实现下这个WCF应用程序. 步骤一:实现WCF服务 在这里,我

WCF--我的第一个WCF程序

第一:当然是要建立WCF服务程序了. . 程序创建后发现生成了三个文件:App.config,IService1.cs,Service1.cs    App.config代码如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <compilation debug="true" /> </system.