您的位置:首页 > 其它

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

2016-08-09 11:29 387 查看
本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤。那么序列化是什么?为什么会有序列化机制?或者说它是为了解决什么问题?作用是什么?现有的.NET 序列化机制和WCF序列化机制有什么不同?我们在本节文章里都会详细介绍。本节结构:【0】数据契约【1】序列化基本概念【2】.NET 序列化机制【3】WCF序列化机制【4】代码实现与分析【5】总结。

下面我们正式进入今天的学习阶段,首先来介绍一下数据契约的概念:

【0】数据契约(DataContract):

在WCF服务编程中我们知道,服务契约定义了远程访问对象和可供调用的服务操作方法,数据契约则是定义服务端和客户端之间要传送的自定义数据类型。在WCF项目中,声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送。类只有声明为DataContract,该类型的对象才可以被传送,且只有类的属性会被传送,需要在属性生命前加DataMember声明,这样该属性就可以被序列化传送。默认情况属性是不可传递的。类的方法不会被传送。WCF对定义的数据契约的类型可以进行更加细节的控制,可以把一个成员属性排除在序列化范围以外,客户端程序不会获得被排除在外的成员属性的任何信息,包括定义和数据。 代码如下:

我们可以看到客户端数据契约的属性都添加了[System.Runtime.Serialization.DataMemberAttribute()]标记,并且我们在服务端数据契约使用别名属性客户端也做了相应的调整。并且生成了相应的私有数据成员字段。

客户端编写代码进行测试,分别测试增加客户端传递数据契约对象和从服务端返回数据契约对象,代码如下:

class WCFClient
{
static void Main(string[] args)
{
//实例化客户端服务代理Tcp
WCFServiceClient wcfServiceProxy =
new WCFServiceClient("WCFDataContractFormatting.IWCFService");
Console.WriteLine("Test call service using TCP--------------------.");
//通过代理调用服务,分别传递不同的参数,进行测试
//实例化数据契约对象,设置信息
UserDataContract userDataContract = new UserDataContract();
userDataContract.UserName = "WCF Client: Frank Xu Lei";
userDataContract.UserEmail = "WCF Client: frank_xl@163.com ";
userDataContract.Mobile = "WCF Client:1666666666";
//调用代理服务,增加用户操作:
wcfServiceProxy.AddNewUser(userDataContract);

//查询用户信息:
string name = "WCF Client: Frank Xu";
UserDataContract userData = wcfServiceProxy.GetUserByName(name);
if (userData != null)
{
Console.WriteLine(userData.UserName);
Console.WriteLine(userData.UserEmail);
Console.WriteLine(userData.Mobile);
}

//Debuging
Console.WriteLine("Press any key to continue

");
Console.Read();

}
}
}

显示结果正确,通过数据契约实现了客户端与WCF服务端的信息交互。如下图:



【5】总结

以上就是本节的全部内容。数据契约的设计和使用在WCF面向服务的分布式应用系统开发中有重要的意义。全文首先介绍了数据契约的基本概念,然后对现有的三种.NET 序列化机制进行了简单的介绍和对比,指出其相关特性。然后对WCF序列化机制做了详细介绍,WCF开发自己的面相服务的格式化器是因为现有的.NET 格式化器的功能上的局限性。最后给出了在WCF服务中使用数据契约进行服务操作的代码实现,并给出了相应的分析。最后是本文的示例代码供大家下载
/Files/frank_xl/WCFServiceDataContractFormattingFrankXuLei.rar .欢迎留言交流。

参考文章:

1,《序列化》http://baike.baidu.com/view/160029.htm

2,《programming in WCF》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: