DataContract データコントラクト ~ ユーザー定義型の利用

ここでは WCF でウェブサービスを開発しているときに、ユーザー定義型を利用する方法を説明します。 ユーザー定義型、というのは、あなたが(好き勝手に)定義するクラスなどのデータ構造のことです。 文字列や整数型などの基本的なデータ型と区別して、そう呼ばれたりします。

WCF ではサービスのインターフェイスを、サービスコントラクト (ServiceContract) という言い方で定義することは別の資料で説明したとおりです。 データ構造の定義はデータコントラクト (DataContract) という言い方をします。

やることはいたって単純で、クラス定義の属性として [DataContract] というのをソッとつけてあげれば OK です。

と、これだけの前置きでさっそく具体例を見ていきましょう。

using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace MyHRService
{
     [ServiceContract]
     public interface IEmployeeInfo
     {
          [OperationContract]
          Employee GetEmployee(string empID);

          [OperationContract]
          List<Employee> GetAllEmployees();

          [OperationContract]
          void AddEmployee(Employee employee);

          [OperationContract]
          void RemoveEmployee(string empID);

     }

     [DataContract]
     public class Employee
     {
          string name = "";
          string empID = "00000";

          [DataMember]
          public string Name
          {
               get { return name; }
               set { name = value; }
          }

          [DataMember]
          public string EmployeeID
          {
               get { return empID; }
               set { empID = value; }
          }
     }
}

この例では Employee (従業員)というクラスを定義しています。WCF で利用するために、[DataContract] という属性を指定しています。

この Employee 情報をやりとりする、サービスを MyHRService (注: HR はヒューマンリソースで人事のことです)という名前空間の中に データとともに定義した、というわけです。

これに対する実装は、かなり手抜きですが、空っぽのこんなひな形で間に合わせてしまいます。(スミマセン)

using System.Collections.Generic;

namespace MyHRService
{
     public class EmployeeInfo : IEmployeeInfo
     {
          public Employee GetEmployee(string empID)
          {
               return null;
          }
          
          public List<Employee> GetAllEmployees()
          {
               return null;
          }
          
          public void AddEmployee(Employee employee)
          {
          
          }
          
          public void RemoveEmployee(string empID)
          {
          
          }
     }
}

こうすることで、このプロキシーコードを取り込めばクライアント側で、MyHRService.Employee としてユーザー定義型が利用できます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門