发布网友 发布时间:2022-04-20 11:22
共1个回答
热心网友 时间:2023-09-21 05:41
这一节我们来了解下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;
}
}
定义完数据契约后 我们定义一个服务契约 客户端就可以通过该契约直接传输数据 客户端添加该契约服务 就可以看到该数据契约了
看如下实例
服务器端契约
// 注意 使用 重构 菜单上的 重命名 命令 可以同时更改代码和配置文件中的接口名 IService
[ServiceContract]
public interface IService
{
[OperationContract]
string GetData(int value)
[OperationContract]
User GetUserInfo(User user)
// TODO: 在此添加您的服务操作
}
public class Service : IService
{
public string GetData(int value)
{
return string Format( You entered: { } value)
}
List<User> list = new List<User>()
public Service ()
{
list Clear()
User user = new User()
user UserID = ;
user UserName = 下里巴人 ;
user UserPwd = ;
user Age = ;
user Remark = 帅哥 ;
list Add(user )
User user = new User()
user UserID = ;
user UserName = Simple ;
user UserPwd = ;
user Age = ;
user Remark = IT ;
list Add(user )
}
/// <summary>
/// 获取用户信息
/// </summary>
/// <param name= user ></param>
/// <returns></returns>
public User GetUserInfo(User user)
{
User info=null;
for (int i = ; i < list Count; i++)
{
if (list[i] UserID==user UserID)
{
info=list[i];
break;
}
}
return info;
}
}
客户端调用
private void button _Click(object sender EventArgs e)
{
DataService Service Client client = new DataService Service Client()
DataService User user = new DataService User()
user UserID = ;
//返回用户信息
DataService User userInfo=client GetUserInfo(user)
if (userInfo == null)
{
MessageBox Show( 没找到该用户信息 )
}
else
{
MessageBox Show( 姓名 + userInfo UserName + 年龄 + userInfo Age ToString())
}
}
效果图
lishixin/Article/program/net/201311/12459