首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

那些年,小弟我们一起学WCF-(4)数据契约

2012-09-29 
那些年,我们一起学WCF--(4)数据契约这一节我们来了解下WCF的数据契约,我们知道,在以往webservice的数据传

那些年,我们一起学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());            }        }

  效果图

           那些年,小弟我们一起学WCF-(4)数据契约
   DEMO: http://download.csdn.net/detail/zx13525079024/4582901

 

 


 

   

热点排行