那些年,我们一起学WCF--(4)数据契约
这一节我们来了解下WCF的数据契约,我们知道,在以往webservice的数据传输中,如果传递复杂数据类型,需要先进行数据序列化,可以使用Serializable属性进行标记,
来对复杂类型进行序列化.但是使用Serializable进行序列化的时候,是把整个类的所有属性和字段进行序列化,实际使用过程中,有些字段和属性我们是不需要进行序列化进行
传输的,这样就增加了数据在传输过程中的开销,使用这种方式缺少灵活性。所以在WCF中,我们可以使用DataContract对复杂类型进行序列化,DataContract可以具体标记哪些字段需要进行序列化,在通信过程中,不需要使用的字段,我们就不要进行序列化,减少传输开销,增加了灵活性.
DataContract是在WCF中最常用的数据契约方式,DataContract定义数据契约,DataMember具体定义哪些成员需要进行序列化,没有声明DataMember
特性的成员,就不会进行序列化,出现在XSD文件中。我们看下面怎样定义数据契约
/// <summary> /// 用户信息 /// </summary> [DataContract] public class User { /// <summary> /// 用户ID /// </summary> [DataMember] public string UserID { get; set; } /// <summary> /// 用户名 /// </summary> [DataMember] public string UserName { get; set; } /// <summary> /// 密码 /// </summary> public string UserPwd { get; set; } /// <summary> /// 年龄 /// </summary> [DataMember] public int Age { get; set; } public string Remark { get; set; } }
定义完数据契约后,我们定义一个服务契约,客户端就可以通过该契约直接传输数据。客户端添加该契约服务,就可以看到该数据契约了。
看如下实例
服务器端契约
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] User GetUserInfo(User user); // TODO: 在此添加您的服务操作 }
public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } List<User> list = new List<User>(); public Service1() { list.Clear(); User user1 = new User(); user1.UserID = "001"; user1.UserName = "下里巴人"; user1.UserPwd = "000"; user1.Age = 25; user1.Remark = "帅哥"; list.Add(user1); User user2 = new User(); user2.UserID = "002"; user2.UserName = "Simple"; user2.UserPwd = "000"; user2.Age = 30; user2.Remark = "IT"; list.Add(user2); } /// <summary> /// 获取用户信息 /// </summary> /// <param name="user"></param> /// <returns></returns> public User GetUserInfo(User user) { User info=null; for (int i = 0; i < list.Count; i++) { if (list[i].UserID==user.UserID) { info=list[i]; break; } } return info; } }
客户端调用
private void button1_Click(object sender, EventArgs e) { DataService.Service1Client client = new DataService.Service1Client(); DataService.User user = new DataService.User(); user.UserID = "001"; //返回用户信息 DataService.User userInfo=client.GetUserInfo(user); if (userInfo == null) { MessageBox.Show("没找到该用户信息"); } else { MessageBox.Show("姓名:" + userInfo.UserName + ",年龄:" + userInfo.Age.ToString()); } }效果图

DEMO: http://download.csdn.net/detail/zx13525079024/4582901