wcf中的数据契约和ado.net实体框架问题求助

发布网友 发布时间: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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com