Dua sen saya pada kontrak di WCF

WCF (Windows Communication Foundation) adalah platform perpesanan yang aman, andal, dan dapat diskalakan untuk mengembangkan layanan di .Net. Saat bekerja dengan WCF, Anda harus terlebih dahulu membuat kontrak layanan dan kemudian menentukan operasi layanan atau kontrak operasi di dalamnya. Anda memiliki berbagai jenis kontrak dalam WCF - kontrak layanan, kontrak data, kontrak kesalahan, kontrak pesan, dan kontrak operasi.

Layanan WCF mengekspos kontrak untuk memfasilitasi komunikasi dengan konsumen layanan. Kontrak adalah standar yang digunakan di WCF untuk menentukan layanan yang seharusnya dilakukan. Kontrak di WCF dapat dikategorikan menjadi dua kategori berbeda:

  •  Kontrak Perilaku: Di WCF kita dapat memiliki tiga kontrak perilaku, yaitu ServiceContract, OperationContract dan FaultContract.
  • Kontrak Struktural: Ini termasuk DataContract dan MessageContract.

ServiceContracts dan OperationContracts

ServiceContract digunakan untuk menunjukkan operasi layanan yang tersedia untuk konsumen layanan di titik akhir layanan tertentu. Intinya, ServiceContract digunakan untuk menentukan operasi yang tersedia untuk digunakan klien layanan. Sebuah ServiceContract didefinisikan menggunakan atribut ServiceContract - biasanya diterapkan ke antarmuka.

ServiceContract bisa menentukan Pola Pertukaran Pesan di antara penyedia layanan dan konsumen layanan dan bisa memiliki satu atau beberapa operasi layanan; ini dikenal sebagai kontrak operasi. Kontrak operasi digunakan untuk menentukan tanda tangan dari metode layanan dan juga aliran transaksi, arah operasi layanan dan juga kontrak kesalahan yang mungkin terkait.

Daftar kode yang diberikan selanjutnya menggambarkan bagaimana kontrak layanan yang khas didefinisikan.

[ServiceContract]

interface ITestService

{

     [OperationContract]

     string GetMessage();

}

public class TestService  :  ITestService

{

     public string GetMessage()

      {

           return "Hello World!";

      }

}

Dalam daftar kode yang diperlihatkan di atas, satu-satunya kontrak operasi dalam kontrak layanan adalah GetMessage. Perhatikan bagaimana atribut telah ditentukan. Selain itu, jika Anda memiliki metode dalam kontrak layanan Anda yang tidak memiliki set atribut kontrak operasi, metode tersebut tidak dapat diekspos oleh layanan, yaitu, metode tersebut tidak dapat digunakan oleh konsumen layanan.

DataContracts, MessageContracts, dan FaultContracts

DataContract digunakan untuk mendeskripsikan data yang perlu dipertukarkan melalui kabel. Ini digunakan untuk menentukan bagaimana data dapat dipertukarkan antara penyedia layanan dan konsumen layanan. Anda bisa menggunakan atribut [DataContract] untuk menghias tipe Anda sehingga data bisa diserialkan sebelum diteruskan melalui kabel. Saat menentukan kontrak data, Anda biasanya perlu menggunakan anggota data untuk menentukan properti kontrak data.

Cuplikan kode berikut menunjukkan bagaimana Anda bisa menghias kelas dengan atribut [DataContract].

[DataContract]

public class Employee

{

 [DataMember]

 public string ID;

 [DataMember]

 public string FirstName;

 [DataMember]

 public string LastName;

}

Kontrak Pesan adalah salah satu yang dapat digunakan untuk menghias badan pesan di WCF. Dalam kebanyakan kasus, Anda tidak perlu menggunakan kontrak pesan - penggunaan kontrak data sudah cukup. Jika Anda memerlukan kontrol yang sangat baik pada pesan SOAP Anda, Anda dapat memanfaatkan kontrak pesan. Anda dapat menggunakan kontrak pesan untuk mengakses header SOAP.

Anda dapat menggunakan kontrak pesan untuk menentukan format pesan SOAP yang diperlukan. Sementara MessageHeaderAttribute dapat diterapkan ke anggota yang ingin Anda sertakan di header SOAP, MessageBodyMemberAttribute dapat digunakan untuk menentukan anggota yang harus menjadi bagian dari tubuh pesan SOAP.

Anda bisa menentukan kontrak pesan dengan menerapkan MessageContractAttribute seperti yang ditunjukkan di bawah ini.

[MessageContract]

public class Transaction

{

  [MessageHeader] public DateTime date;

  [MessageBodyMember] public int amount;

}

Kontrak kesalahan di WCF digunakan untuk menentukan dan menyebarkan kesalahan yang dapat terjadi ketika operasi layanan dijalankan. Intinya, Anda dapat memanfaatkan kontrak kesalahan untuk meneruskan pesan kesalahan ke konsumen layanan ketika terjadi kesalahan dalam layanan Anda. Perhatikan bahwa Anda dapat menghias kontrak operasi Anda menggunakan kontrak kerusakan - kontrak operasi layanan dapat memiliki satu atau beberapa kontrak kerusakan yang terkait. Berikut adalah contoh yang menunjukkan bagaimana kontrak kesalahan dapat digunakan. Perhatikan bahwa dua kontrak kesalahan bernama FaultContractOne dan FaultContractTwo telah diterapkan ke Kontrak kontrak operasi dalam contoh kode yang diberikan di bawah ini.

[ServiceContract]

interface Contract

{

 [FaultContract(typeof(FaultContractOne))]

 [FaultContract(typeof(FaultContractTwo))]

 [OperationContract]

 string GetMessage();

 }