在WCF中有两种契约各自是DataContract和MessageContract,这篇博客来讲一下两者的差别。先看一下两者定义契约实体的方式有和不同。

1.数据契约

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace EmployeeService
{ [DataContract(Namespace="http://Employee/employee")] public class Employee
{
private int _id;
private string _name;
private string _gender;
private DateTime _dateOfBirth; [DataMember(Name="id",Order=1)]
public int ID
{
get { return _id; }
set { _id = value; }
} [DataMember(Name = "Name", Order = 2)]
public string Name
{
get { return _name; }
set { _name = value; }
} [DataMember(Name = "Gender", Order = 2)]
public string Gender
{
get { return _gender; }
set { _gender = value; }
} public DateTime DateOfBirth
{
set { _dateOfBirth = value; }
get { return _dateOfBirth; }
} }
}
</span></span>

2.消息契约

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.ServiceModel;
namespace EmployeeService
{ [MessageContract(IsWrapped=true,WrapperName="EmployeeInfoObject",WrapperNamespace="http://Employee")]
public class Employee
{
private int _id;
private string _name;
private string _gender;
private DateTime _dateOfBirth; [MessageBodyMember(Order=1,Namespace="http://Employee")]
public int ID
{
get { return _id; }
set { _id = value; }
} [MessageBodyMember(Order = 2, Namespace = "http://Employee")]
public string Name
{
get { return _name; }
set { _name = value; }
} [MessageBodyMember(Order = 3, Namespace = "http://Employee")]
public string Gender
{
get { return _gender; }
set { _gender = value; }
} [MessageBodyMember(Order = 4, Namespace = "http://Employee")]
public DateTime DateOfBirth
{
set { _dateOfBirth = value; }
get { return _dateOfBirth; }
} }
}
</span></span>

3.差别一:DataContract gives very limited control over the SOAP message.

我们在先前的博客中也提到过,通过採用数据契约的方式能够改变XML元素在主体部分中的位置。仅仅有这些,因此数据契约并没有太多的控制对SOAP协议。

4. MessagecContract gives full control.

与数据契约比較的话。消息契约能够做到全然的控制SOAP协议,比方生成的XML元素header和body部分。因此採用消息契约的话,能够全然控制SOAP协议。因此也能够对我们一些敏感的信息做一下保护。

具体请參考:消息契约(Message Contract)和基于消息契约的序列化

Difference between datacontract and messagecontract in wcf的更多相关文章

  1. WCF中DataContract和MessageContract的区别

    一.代码案例 首选建立2个WCF Service,它们分别使用不同的Contract,同时创建一个Console控制台项目,作为Client: 其中,WcfServiceWithDataContrac ...

  2. WCF入门(11)

    前言 终于出太阳了. 可惜风太大,凉在阳台上的衣服全被吹到了地上,外加几双袜子被吹掉了,gone. 第11集 Difference between DataContract and MessageCo ...

  3. WCF初探-22:WCF中使用Message类(上)

    前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...

  4. WCF技术剖析(卷1)WCF全面解析文摘

    第1章 wcf简介 soa体现的是一种对关注点进行分解的思想,与技术无关 soa的基本思想: a.服务自治  独立部署,不依赖其他 b.依赖于开放的标准  采用xml,xsd,及wsdl作为服务描述的 ...

  5. 理解WCF中的Contracts

    WCF中的Contracts WCF通过Contract来说明服务和操作,一般包含五种类型的Contract:ServiceContract,OperationContract,FaultContra ...

  6. WCF 已知类型和泛型解析程序 KnownType

    数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...

  7. C# DataContract DataMember

    Windows Communication Foundation (WCF) uses a serialization engine called the Data Contract Serializ ...

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

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

  9. WCF入门(二)-----实战开发

    在这个实战中我们将使用DataContract,ServiceContract来构建WCF服务,并使用VS2008内置的“WCFSVCHost”运行我们创建的WCF服务,并使用“WCF测试客户端”来测 ...

随机推荐

  1. 查找后去掉EditTextView的焦点

    //在按钮点击事件里处理 bt_search.setOnClickListener(new OnClickListener() { public void onClick(View v) {      ...

  2. JS - 鼠标经过边框旋转

    *右侧为鼠标经过时效果. 下载地址:http://www.lanrentuku.com/js/tupian-1200.html

  3. 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...

  4. hdu 4704 同余定理+普通快速幂

    此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16.... 这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大, ...

  5. 解决删除Volume报错的问题

    很久没有遇到过删除Volume出错使得Volume处于Error_Deleting状态的情况了,昨天删除一个Volume时又出现了这个问题,这里顺便把解决方法记录一下. 注意我这里针对的是后端采用is ...

  6. 打破“中规中矩”,手机QQ何以萌翻众人?

        随着移动互联网的迅猛发展,越来越多的手机应用展现在了用户面前,不过,面对林林总总的手机应用,有时候我们却提不起兴趣,因为功能的同质化,UI的千篇一律已经让我们多少有些审美疲劳的感觉.     ...

  7. win32 字体变换与窗口同大同小

    #include <windows.h> #include "res/resource.h" LRESULT CALLBACK WinProc(HWND hwnd, U ...

  8. Shell printf 命令

    Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序. 标准所定义,因此使用printf的脚本比使用echo移植性好. printf 使用引 ...

  9. C++ map

    C++ map Map is an associative container that contains a sorted list of unique key-value pairs. That ...

  10. MVP模式在Android开发中的应用

    一.MVP介绍      随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一 ...