Gambaran Umum Pembuatan Titik Akhir

Semua komunikasi dengan layanan Windows Communication Foundation (WCF) terjadi melalui titik akhir layanan. Titik akhir menyediakan akses bagi klien ke fungsionalitas yang ditawarkan layanan WCF. Bagian ini menjelaskan struktur titik akhir dan menguraikan cara menentukan titik akhir dalam konfigurasi dan dalam kode.

Struktur Titik Akhir

Setiap titik akhir berisi alamat yang menunjukkan di mana menemukan titik akhir, pengikatan yang menentukan bagaimana klien dapat berkomunikasi dengan titik akhir, dan kontrak yang mengidentifikasi metode yang tersedia.

  • Alamat. Alamat secara unik mengidentifikasi titik akhir dan memberi tahu calon konsumen di mana layanan tersebut berada. Ini diwakili dalam model objek WCF oleh EndpointAddress alamat, yang berisi Pengidentifikasi Sumber Daya Seragam (Uniform Resource Identifier atau URI) dan properti alamat yang mencakup identitas, beberapa elemen Web Services Description Language (WSDL), dan kumpulan header opsional. Header opsional memberikan informasi pengalamatan terperinci tambahan untuk mengidentifikasi atau berinteraksi dengan titik akhir. Untuk informasi selengkapnya, lihat Menentukan Alamat Titik Akhir.

  • Pengikatan. Pengikatan menentukan cara berkomunikasi dengan titik akhir. Pengikatan menentukan bagaimana titik akhir berkomunikasi dengan dunia, termasuk protokol transportasi mana yang akan digunakan (misalnya, TCP atau HTTP), yang pengodeannya digunakan untuk pesan (misalnya, teks atau biner), dan persyaratan keamanan mana yang diperlukan (misalnya, Secure Sockets Layer [SSL] atau keamanan pesan SOAP). Untuk detailnya, lihat Menggunakan Pengikatan untuk Mengonfigurasi Layanan dan Klien.

  • Kontrak layanan. Kontrak layanan menguraikan fungsionalitas apa yang diekspos titik akhir kepada klien. Kontrak menentukan operasi yang dapat dipanggil klien, bentuk pesan dan jenis parameter input atau data yang diperlukan untuk memanggil operasi, dan jenis pesan pemrosesan atau respons yang dapat diharapkan klien. Tiga jenis kontrak dasar sesuai dengan pola pertukaran pesan dasar (Message Exchange Patterns atau MEPs): datagram (satu arah), permintaan/balasan, dan dupleks (dua arah). Kontrak layanan juga dapat menggunakan kontrak data dan pesan untuk memerlukan jenis data dan format pesan tertentu saat diakses. Untuk informasi selengkapnya tentang kontrak layanan, lihat Merancang Kontrak Layanan. Perhatikan bahwa klien mungkin juga diperlukan untuk menerapkan kontrak yang ditentukan layanan, yang disebut kontrak panggilan balik, untuk menerima pesan dari layanan dalam MEP dupleks. Untuk informasi selengkapnya, lihat Layanan Dupleks.

Alamat titik akhir untuk suatu layanan dapat ditentukan baik secara imperatif dengan menggunakan kode atau secara deklaratif melalui konfigurasi. Jika titik akhir tidak ditentukan maka runtime bahasa umum menyediakan titik akhir default dengan menambahkan satu titik akhir default pada setiap alamat dasar untuk setiap kontrak layanan yang diimplementasikan oleh layanan. Menentukan titik akhir dalam kode biasanya tidak praktis karena pengikatan dan alamat untuk layanan yang disebarkan biasanya berbeda dari yang digunakan saat layanan sedang dikembangkan. Umumnya, lebih praktis menentukan titik akhir layanan menggunakan konfigurasi, bukan kode. Menjaga informasi pengikatan dan pengalamatan di luar kode memungkinkan informasi tersebut berubah tanpa harus mengompilasi ulang dan menyebarkan ulang aplikasi.

Catatan

Saat menambahkan titik akhir layanan yang melakukan peniruan, Anda harus menggunakan salah satu AddServiceEndpoint metode atau GetContract(Type, Type) metode untuk memuat kontrak dengan benar ke ServiceDescription objek baru.

Menentukan Titik Akhir dalam Kode

Contoh berikut mengilustrasikan cara menentukan titik akhir dalam kode dengan yang berikut:

  • Tentukan kontrak untuk IEcho jenis layanan yang menerima nama dan gema seseorang dengan respons "Halo<nama>!".

  • Menerapkan Echo layanan jenis yang ditentukan oleh IEcho kontrak.

  • Tentukan alamat titik akhir http://localhost:8000/Echo untuk layanan.

  • Konfigurasikan layanan Echo menggunakan pengikatan WSHttpBinding.

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Use a predefined WSHttpBinding to configure the service.
          WSHttpBinding binding = new WSHttpBinding();

          // Add the endpoint for this service to the service host.
          serviceHost.AddServiceEndpoint(
             typeof(IEcho),
             binding,
             echoUri
           );

          // Open the service host to run it.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Create a ServiceHost for the Echo service.
Dim svcHost As ServiceHost = New ServiceHost(GetType(HelloWorld), echoUri)

' Use a predefined WSHttpBinding to configure the service.
Dim binding As New WSHttpBinding()

' Add the endpoint for this service to the service host.
serviceHost.AddServiceEndpoint(GetType(IEcho), binding, echoUri)

' Open the service host to run it.
serviceHost.Open()

Catatan

Host layanan dibuat dengan alamat dasar dan kemudian alamat lainnya, relatif terhadap alamat dasar, ditentukan sebagai bagian dari titik akhir. Pemartisian alamat ini memungkinkan beberapa titik akhir ditentukan dengan lebih nyaman untuk layanan di host.

Catatan

Properti dari ServiceDescription dalam aplikasi layanan tidak boleh dimodifikasi berikutnya setelah OnOpening metode pada ServiceHostBase. Beberapa anggota, seperti Credentials properti dan AddServiceEndpoint metode pada ServiceHostBase dan ServiceHost, menampilkan pengecualian jika dimodifikasi setelah titik tersebut. Yang lain mengizinkan Anda untuk memodifikasinya, tetapi hasilnya tidak ditentukan.

Demikian pula, pada klien, nilai ServiceEndpoint tidak boleh dimodifikasi setelah panggilan ke OnOpening pada ChannelFactory. Properti Credentials menampilkan pengecualian jika dimodifikasi setelah titik tersebut. Nilai deskripsi klien lainnya dapat dimodifikasi tanpa kesalahan, tetapi hasilnya tidak ditentukan.

Baik untuk layanan atau klien, sebaiknya Anda mengubah deskripsi sebelum memanggil Open.

Menentukan Titik Akhir dalam Konfigurasi

Saat membuat aplikasi, Anda biasanya ingin menunda keputusan ke administrator setelah penerapan aplikasi. Misalnya, seringkali tidak ada cara untuk mengetahui sebelumnya apa alamat layanan, atau Pengidentifikasi Sumber Daya Seragam (URI), nantinya. Alih-alih mengkodekan alamat secara keras, lebih baik mengizinkan administrator melakukannya setelah membuat layanan. Fleksibilitas ini dapat dicapai melalui konfigurasi. Untuk detailnya, lihat Mengonfigurasi Layanan.

Catatan

Gunakan ServiceModel Metadata Utility Tool (Svcutil.exe) dengan sakelar/config:filename[,filename] untuk membuat file konfigurasi dengan cepat.

Menggunakan Titik Akhir Default

Jika titik akhir tidak ditentukan dalam kode atau dalam konfigurasi maka runtime bahasa umum menyediakan titik akhir default dengan menambahkan satu titik akhir default pada setiap alamat dasar untuk setiap kontrak layanan yang diimplementasikan oleh layanan. Alamat dasar dapat ditentukan dalam kode atau dalam konfigurasi, dan titik akhir default ditambahkan jika Open() dipanggil pada ServiceHost. Contoh ini adalah contoh yang sama dari bagian sebelumnya, tetapi karena tidak ada titik akhir yang ditentukan, titik akhir default ditambahkan.

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   public class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Open the service host to run it. Default endpoints
          // are added when the service is opened.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Open the service host to run it. Default endpoints
' are added when the service is opened.
serviceHost.Open()

Jika titik akhir disediakan secara eksplisit, titik akhir default masih dapat ditambahkan dengan memanggil AddDefaultEndpoints pada ServiceHost sebelum memanggil Open. Untuk informasi selengkapnya tentang titik akhir default, lihat Konfigurasi Sederhana dan Konfigurasi Sederhana untuk Layanan WCF.

Lihat juga