熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

一起學WCF--數據契約

2022-06-13   來源: .NET編程 

  這一節我們來了解下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 stringFormat(You entered: {} value)

  }

  List<User> list = new List<User>()

  public Service()

  {

  listClear()

  User user = new User()

  userUserID = ;

  userUserName = 下裡巴人;

  userUserPwd = ;

  userAge = ;

  userRemark = 帥哥;

  listAdd(user

  User user = new User()

  userUserID = ;

  userUserName = Simple;

  userUserPwd = ;

  userAge = ;

  userRemark = IT;

  listAdd(user

  }

  /// <summary>

  /// 獲取用戶信息

  /// </summary>

  /// <param name=user></param>

  /// <returns></returns>

  public User GetUserInfo(User user)

  {

  User info=null;

  for (int i = ; i < listCount; i++)

  {

  if (list[i]UserID==userUserID)

  {

  info=list[i];

  break;

  }

  }

  return info;

  }

  }

  客戶端調用

  private void button_Click(object sender EventArgs e)

  {

  DataServiceServiceClient client = new DataServiceServiceClient()

  DataServiceUser user = new DataServiceUser()

  userUserID = ;

  //返回用戶信息

  DataServiceUser userInfo=clientGetUserInfo(user)

  if (userInfo == null)

  {

  MessageBoxShow(沒找到該用戶信息

  }

  else

  {

  MessageBoxShow(姓名 + userInfoUserName + 年齡 + userInfoAgeToString())

  }

  }

  效果圖

  
    


From:http://tw.wingwit.com/Article/program/net/201311/12459.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.