这一节我们来了解下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