自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解)。之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约(Contracts)。

[什么是契约?]

生活中:指双方共同定义的协议。

WCF中:任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方能够彼此理解对方的依据,WCF是一种分布式开发技术。WCF中的规则就被称为契约,它是WCF的消息标准,是WCF不可缺少的一部分。

[契约的分类及用途]

在WCF中,契约被分为4类,如下图:

1)Service Contract:用于定于服务操作

这种契约包括两种ServiceContract 和 OperationContract

ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用

OperationContract用于类库的方法上,用于指示WCF方法可被远程调用

2)Data Contract:用于定义数据结构

数据契约分为两种:DataContract 和DataMember.

DataContract用于类或者结构上,指示WCF此类或者结构能够被序列化并被传输

DataMember只能用在类或者结构的属性或者字段上,指示WCF该属性或字段能够被序列化传输

3)Message Contract:用于控制消息格式

消息契约描述了一个服务以及一个服务接收的SOAP消息的结构,并且允许你检测和控制SOAP消息头和消息体,还有是否对消息进行加密和签名。

4)Fault Contract:用于的自定义错误的异常

用于自定义错误异常的处理方式。WCF是分布式应用开发,当服务端捕获异常时不能直接将错误抛出来,必须经过WCF的处理将自定义的异常处理抛给用户,这样给出一个友好的提示。

客户端常见错误:

1、通信错误

2、代理和通道的状态,代理被关闭

3、服务调用错误

[实践]

1、服务契约:

    [ServiceContract]
public interface WCFIAddSet
{
#region +AddTime 添加选课
/// <summary>
/// 添加选课
/// </summary>
/// <param name="roundViewModel">轮次实体</param>
/// <returns>布尔值</returns>
[OperationContract]
bool AddTime(RoundViewModel roundViewModel);
#endregion
}

2、数据契约:

    [DataContract] //数据契约
[Classes("退选控制界面")]
[Serializable]
public class QuitSelectedViewModel
{ /// <summary>
/// 本次选课ID
/// </summary>
[DataMember]
[Colum("本次选课ID", DbType = DbType.Guid)]
public Guid PublicChoseCourseID { get; set; }
}

[总结]

通过这几天的学习对于WCF的机制有了深入的了解,这次在项目中只用到了数据契约和服务契约,现在只是会简单的应用,还需要实践一下WCF的消息和错误处理契约,每个程序都有错误,可以尝试用一下WCF的错误处理机制,也是对这一方面的锻炼。



(三)WCF之契约的更多相关文章

  1. 跟我一起学WCF(7)——WCF数据契约与序列化详解

    一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约 ...

  2. WCF分布式开发步步为赢(7):WCF数据契约与序列化

    本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为 ...

  3. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  4. WCF之契约的分类(部分為參考他人)

    什么是契约呢?在使用WCF时,对其制定各种各样的规则,就叫做WCF契约.任何一个分布式的应用程序在传递消息的时候都需要实现制定一个规则. 任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定 ...

  5. 菜鸟学习WCF笔记-契约(Contract)

    契约,契约确保了服务的正常调用,客户端以契约的方式进行服务端调用,而服务则需要按照契约规定的方式提供服务. 契约是服务提供的一组操作的描述 功能上讲:每个操作对应着某个具体的功能实现,以及调用这个操作 ...

  6. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  7. 无废话WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  8. wcf服务契约的重载

    a. 服务端 .服务端 契约用OperationContract的Name实现重载 using System; using System.Collections.Generic; using Syst ...

  9. 【转】WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

随机推荐

  1. vue-cli3 element 分页组件el-pagination的基本使用

    <!--分页组件--> <el-pagination :total="total" :current-page="currentPage" : ...

  2. python爬虫1

    1 网页结构 html:超文本标记语言------->类似人的鼻子耳朵,长在那里,大体骨架就是那个样子 css:层叠样式表------->这个是外观的深化,比如贴个双眼皮,橙色眼睛... ...

  3. 【转帖】两种IO模式:Proactor与Reactor模式

    两种IO模式:Proactor与Reactor模式 https://www.cnblogs.com/pigerhan/p/3474217.html. 挺好的说明了epoll和IOCP的区别 在高性能的 ...

  4. 通过命令窗口导入导出oracle数据库到dmp文件

    通过命令窗口导入导出oracle数据库到dmp文件 很多时候我们需要备份Oracle的数据库,然后将数据导入其他数据库,因为有大文本字段会导致insert无法完全导出,只能导出为dmp文件,前提是wi ...

  5. linux系统状态脚本

    #!/bin/bashprintf "%10s\n" "##主机名##"printf "%-10s\n" "$(hostname) ...

  6. 17 IO流(十四)——Print流

    PrintStream流 PrintStream作为一个包装流,它可以包装字节流,甚至可以使用指定的文件创建一个打印流.它的构造函数很丰富,建议打开API看一下. 它常用的方法是print方法与pri ...

  7. L2R 二:常用评价指标之AUC

    零零散散写了一些,主要是占个坑: AUC作为一个常用的评价指标,无论是作为最后模型效果评价还是前期的特征选择,都发挥着不可替代的作用,下面我们详细介绍下这个指标. 1.定义 2.实现 # coding ...

  8. BZOJ4141 THUSC2013 魔塔 贪心

    没得传送门 考虑当\(Atk\)增大时,\(Def\)一定越来越没用,因为回合数在变少.所以考虑从小到大枚举\(Atk\)然后双指针计算. 设\(f_i(x)\)表示在\(Atk = i\)时,\(D ...

  9. 2 Match、Filter、排序、分页、全文检索、短语匹配、关键词高亮

    查索引内所有文档记录 GET  /beauties/my/_search   GET  /beauties/my/_search {     "query":{         & ...

  10. JAVA中循环遍历list有三种方式

    转自:https://blog.csdn.net/changjizhi1212/article/details/81036509JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常 ...