Bagikan melalui


Tutorial: Meng-hosting dan menjalankan layanan dasar WCF

Tutorial ini menjelaskan tugas ketiga dari lima tugas yang diperlukan untuk membuat aplikasi dasar Windows Communication Foundation (WCF). Untuk gambaran umum tutorial, lihat Tutorial: Mulai menggunakan aplikasi Windows Communication Foundation.

Tugas berikutnya untuk membuat aplikasi WCF adalah meng-hosting layanan WCF dalam aplikasi konsol. Layanan WCF mengekspos satu atau beberapa titik akhir, yang masing-masing mengekspos satu atau beberapa operasi layanan. Titik Akhir Layanan menentukan informasi berikut:

  • Alamat tempat Anda dapat menemukan layanan.
  • Pengikatan data yang berisi informasi yang menjelaskan bagaimana klien harus berkomunikasi dengan layanan.
  • Kontrak yang menentukan fungsionalitas yang disediakan layanan kepada kliennya.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat dan mengonfigurasi proyek aplikasi konsol untuk meng-hosting layanan WCF.
  • Tambahkan kode untuk meng-hosting Layanan WCF.
  • Perbarui file konfigurasi.
  • Mulai layanan WCF dan verifikasi bahwa layanan ini berjalan.

Membuat dan mengonfigurasi proyek aplikasi konsol untuk meng-hosting layanan

  1. Membuat proyek aplikasi konsol di Visual Studio:

    1. Dari menu File, pilih Buka>Proyek/Solusi dan telusuri ke solusi GettingStarted yang sebelumnya Anda buat (GettingStarted.sln). Pilih Buka.

    2. Dari menu Tampilan, pilih Penjelajah Solusi.

    3. Di jendela Penjelajah Solusi, pilih solusi GettingStarted (node atas), lalu pilih Tambahkan>Project Baru dari menu pintasan.

    4. Di jendela Tambahkan Project Baru, di sisi kiri, pilih kategori Windows Desktop di bawah Visual C# atau Visual Basic.

    5. Pilih templat Aplikasi Konsol (.NET Framework), dan masukkan GettingStartedHost untuk Nama. Pilih OK.

  2. Tambahkan referensi dalam proyek GettingStartedHost ke proyek GettingStartedLib:

    1. Di jendela Penjelajah Solusi, pilih folder Referensi di bawah proyek GettingStartedHost, lalu pilih Tambahkan Referensi dari menu pintasan.

    2. Dalam dialog Tambahkan Referensi, di bagian Proyek di sisi kiri jendela, pilih Solusi.

    3. Pilih GettingStartedLib di bagian tengah jendela, lalu pilih OK.

      Tindakan ini membuat jenis yang ditentukan dalam proyek GettingStartedLib tersedia untuk proyek GettingStartedHost.

  3. Tambahkan referensi dalam proyek GettingStartedHost ke perakitan System.ServiceModel :

    1. Di jendela Penjelajah Solusi, pilih folder Referensi di bawah proyek GettingStartedHost, lalu pilih Tambahkan Referensi dari menu pintasan.

    2. Di jendela Tambahkan Referensi, di bawah Rakitan di sisi kiri jendela, pilih Kerangka Kerja.

    3. Pilih System.ServiceModel, lalu pilih OK.

    4. Simpan solusi dengan memilihFile>Simpan Semua.

Menambahkan kode untuk meng-hosting layanan

Untuk meng-hosting layanan, Anda menambahkan kode untuk melakukan langkah-langkah berikut:

  1. Buat URI untuk alamat dasar.
  2. Buat instans kelas untuk meng-hosting layanan.
  3. Buat titik akhir layanan.
  4. Aktifkan pertukaran metadata.
  5. Buka host layanan untuk mendengarkan pesan masuk.

Buat perubahan berikut pada kode:

  1. Buka file Program.cs atau Module1.vb di proyek GettingStartedHost dan ganti kodenya dengan kode berikut:

    using System;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    using GettingStartedLib;
    
    namespace GettingStartedHost
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Step 1: Create a URI to serve as the base address.
                Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
    
                // Step 2: Create a ServiceHost instance.
                ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
    
                try
                {
                    // Step 3: Add a service endpoint.
                    selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
    
                    // Step 4: Enable metadata exchange.
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    selfHost.Description.Behaviors.Add(smb);
    
                    // Step 5: Start the service.
                    selfHost.Open();
                    Console.WriteLine("The service is ready.");
    
                    // Close the ServiceHost to stop the service.
                    Console.WriteLine("Press <Enter> to terminate the service.");
                    Console.WriteLine();
                    Console.ReadLine();
                    selfHost.Close();
                }
                catch (CommunicationException ce)
                {
                    Console.WriteLine("An exception occurred: {0}", ce.Message);
                    selfHost.Abort();
                }
            }
        }
    }
    
    Imports System.ServiceModel
    Imports System.ServiceModel.Description
    Imports GettingStartedLib.GettingStartedLib
    
    Module Service
    
        Class Program
            Shared Sub Main()
                ' Step 1: Create a URI to serve as the base address.
                Dim baseAddress As New Uri("http://localhost:8000/GettingStarted/")
    
                ' Step 2: Create a ServiceHost instance.
                Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress)
               Try
    
                    ' Step 3: Add a service endpoint.
                    selfHost.AddServiceEndpoint( _
                        GetType(ICalculator), _
                        New WSHttpBinding(), _
                        "CalculatorService")
    
                    ' Step 4: Enable metadata exchange.
                    Dim smb As New ServiceMetadataBehavior()
                    smb.HttpGetEnabled = True
                    selfHost.Description.Behaviors.Add(smb)
    
                    ' Step 5: Start the service.
                    selfHost.Open()
                    Console.WriteLine("The service is ready.")
    
                    ' Close the ServiceHost to stop the service.
                    Console.WriteLine("Press <Enter> to terminate the service.")
                    Console.WriteLine()
                    Console.ReadLine()
                    selfHost.Close()
    
                Catch ce As CommunicationException
                    Console.WriteLine("An exception occurred: {0}", ce.Message)
                    selfHost.Abort()
                End Try
            End Sub
        End Class
    
    End Module
    

    Untuk informasi tentang cara kerja kode ini, lihat Langkah-langkah program hosting layanan.

  2. Perbarui properti proyek:

    1. Di jendela Penjelajah Solusi, pilih folder GettingStartedHost, lalu pilih Properti dari menu pintasan.

    2. Pada halaman properti GettingStartedHost, pilih tab Aplikasi:

      • Untuk proyek C#, pilih GettingStartedHost.Program dari daftar objek Startup.

      • Untuk proyek Visual Basic, pilih Service.Program dari daftar objek Startup.

    3. Dari menu File, pilih Simpan Semua.

Verifikasi bahwa layanan berfungsi

  1. Bangun solusi, lalu jalankan aplikasi konsol GettingStartedHost dari dalam Visual Studio.

    Layanan harus dijalankan dengan hak istimewa administrator. Karena Anda membuka Visual Studio dengan hak istimewa administrator, ketika Anda menjalankan GettingStartedHost di Visual Studio, aplikasi juga dijalankan dengan hak istimewa administrator. Sebagai alternatif, Anda dapat membuka perintah baru sebagai administrator (pilih Lebih Banyak>Jalankan sebagai administrator dari menu pintasan) dan jalankan GettingStartedHost.exe di dalamnya.

  2. Buka browser web dan telusuri ke halaman layanan di http://localhost:8000/GettingStarted/.

    Catatan

    Layanan seperti ini memerlukan izin yang tepat untuk mendaftarkan alamat HTTP pada komputer untuk mendengarkan. Akun administrator memiliki izin ini, tetapi akun non-administrator harus diberikan izin untuk namespace layanan HTTP. Untuk informasi selengkapnya tentang cara mengonfigurasi reservasi namespace, lihat Mengonfigurasi HTTP dan HTTPS.

Langkah-langkah program hosting layanan

Langkah-langkah dalam kode yang Anda tambahkan untuk meng-hosting layanan dijelaskan sebagai berikut:

  • Langkah 1: Buat instans kelas Uri untuk menahan alamat dasar layanan. URL yang berisi alamat dasar memiliki URI opsional yang mengidentifikasi layanan. Alamat dasar diformat sebagai berikut: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. Alamat dasar untuk layanan kalkulator menggunakan transportasi HTTP, localhost, port 8000, dan segmen URI, GettingStarted.

  • Langkah 2: Buat instans kelas ServiceHost, yang Anda gunakan untuk meng-hosting layanan. Konstruktor mengambil dua parameter: jenis kelas yang mengimplementasikan kontrak layanan dan alamat dasar layanan.

  • Langkah 3: Buat instans ServiceEndpoint. Titik akhir layanan terdiri dari alamat, pengikatan, dan kontrak layanan. Konstruktor ServiceEndpoint terdiri dari jenis antarmuka kontrak layanan, pengikatan, dan alamat. Kontrak layanan adalah ICalculator, yang Anda tentukan dan terapkan dalam jenis layanan. Pengikatan untuk sampel ini adalah WSHttpBinding, yang merupakan pengikatan bawaan dan terhubung ke titik akhir yang sesuai dengan spesifikasi WS-*. Untuk informasi selengkapnya tentang pengikatan WCF, lihat Gambaran umum pengikatan WCF. Anda menambahkan alamat ke alamat dasar untuk mengidentifikasi titik akhir. Kode menentukan alamat sebagai CalculatorService dan alamat yang sepenuhnya memenuhi syarat untuk titik akhir sebagai http://localhost:8000/GettingStarted/CalculatorService.

    Penting

    Untuk .NET Framework Versi 4 dan yang lebih baru, menambahkan titik akhir layanan bersifat opsional. Untuk versi ini, jika Anda tidak menambahkan kode atau konfigurasi, WCF menambahkan satu titik akhir default untuk setiap kombinasi alamat dasar dan kontrak yang diterapkan oleh layanan. Untuk informasi selengkapnya tentang titik akhir default, lihat Menentukan alamat titik akhir. Untuk informasi selengkapnya tentang titik akhir, pengikatan, dan perilaku default, lihat Konfigurasi Sederhana dan Konfigurasi Sederhana untuk Layanan WCF.

  • Langkah 4: Aktifkan pertukaran metadata. Klien menggunakan pertukaran metadata untuk menghasilkan proksi untuk memanggil operasi layanan. Untuk mengaktifkan pertukaran metadata, buat instans ServiceMetadataBehavior, atur properti HttpGetEnabled ke true, dan tambahkan objek ServiceMetadataBehavior ke koleksi Behaviors instans ServiceHost.

  • Langkah 5: Buka ServiceHost untuk mendengarkan pesan masuk. Aplikasi menunggu Anda menekan Enter. Setelah aplikasi membuat instans ServiceHost, aplikasi menjalankan blok try/catch. Untuk informasi selengkapnya tentang menangkap pengecualian dengan aman yang dilemparkan oleh ServiceHost, lihat Menggunakan Tutup dan Batalkan untuk merilis sumber daya klien WCF.

Penting

Saat Anda menambahkan pustaka layanan WCF, Visual Studio meng-hostingnya untuk Anda jika Anda men-debugnya dengan memulai host layanan. Untuk menghindari konflik, Anda dapat mencegah Visual Studio meng-hosting pustaka layanan WCF.

  1. Pilih proyek GettingStartedLib di Penjelajah Solusi dan pilih Properti dari menu pintasan.
  2. Pilih Opsi WCF dan hapus centang Mulai Host Layanan WCF saat melakukan penelusuran kesalahan proyek lain dalam solusi yang sama.

Langkah berikutnya

Dalam tutorial ini, Anda mempelajari cara:

  • Membuat dan mengonfigurasi proyek aplikasi konsol untuk meng-hosting layanan WCF.
  • Tambahkan kode untuk meng-hosting Layanan WCF.
  • Perbarui file konfigurasi.
  • Mulai layanan WCF dan verifikasi bahwa layanan ini berjalan.

Lanjutkan ke tutorial berikutnya untuk mempelajari membuat klien WCF.