Mengakses Layanan Menggunakan Klien WCF

Setelah Anda membuat layanan, langkah selanjutnya adalah membuat proksi klien WCF. Aplikasi klien menggunakan proksi klien WCF untuk berkomunikasi dengan layanan. Aplikasi klien biasanya mengimpor metadata layanan untuk menghasilkan kode klien WCF yang dapat digunakan untuk memanggil layanan.

Langkah-langkah dasar untuk membuat klien WCF meliputi yang berikut ini:

  1. Kompilasi kode layanan.

  2. Buat proksi klien WCF.

  3. Inisialisasi proksi klien WCF.

Proksi klien WCF dapat dihasilkan secara manual dengan menggunakan Alat Utilitas Metadata Model Layanan (SvcUtil.exe) untuk informasi selengkapnya lihat, Alat Utilitas Metadata ServiceModel (Svcutil.exe). Proksi klien WCF juga dapat dihasilkan dalam Visual Studio menggunakan fitur Tambahkan Referensi Layanan . Untuk menghasilkan proksi klien WCF menggunakan salah satu metode, layanan harus sedang berjalan. Jika layanan di-host sendiri, Anda perlu mengoperasikan host. Jika layanan dihosting di IIS/WAS, Anda tidak perlu melakukan hal lain.

Alat Utilitas Metadata ServiceModel

Alat Utilitas Metadata ServiceModel (Svcutil.exe) adalah alat baris perintah untuk menghasilkan kode dari metadata. Penggunaan berikut adalah contoh perintah Svcutil.exe dasar.

Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>

Atau, Anda dapat menggunakan Svcutil.exe dengan file Bahasa Deskripsi Layanan Web (WSDL) dan bahasa definisi Skema XML (XSD) pada sistem file.

Svcutil.exe <list of WSDL and XSD files on file system>

Hasilnya adalah file kode yang berisi kode klien WCF yang dapat digunakan aplikasi klien untuk memanggil layanan.

Anda juga dapat menggunakan alat ini untuk menghasilkan file konfigurasi.

Svcutil.exe <file1 [,file2]>

Jika hanya satu nama file yang diberikan, itu adalah nama file output. Jika dua nama file diberikan, maka file pertama adalah file konfigurasi input yang kontennya digabungkan dengan konfigurasi yang dihasilkan dan ditulis ke dalam file kedua. Untuk informasi selengkapnya tentang konfigurasi, lihat Mengonfigurasi Pengikatan untuk Layanan.

Penting

Permintaan metadata yang tidak aman menimbulkan risiko tertentu dengan cara yang sama seperti permintaan jaringan yang tidak aman: Jika Anda tidak yakin bahwa ujung server yang Anda komunikasikan adalah pihak yang benar-benar diklaimnya, informasi yang Anda ambil mungkin metadata dari layanan yang bersifat jahat.

Menambahkan Referensi Layanan di Visual Studio

Dengan layanan berjalan, klik kanan proyek yang akan berisi proksi klien WCF dan pilih Tambahkan>Referensi Layanan. Dalam Dialog Tambahkan Referensi Layanan, ketik URL ke layanan yang ingin Anda panggil dan klik tombol Buka . Dialog akan menampilkan daftar layanan yang tersedia di alamat yang Anda tentukan. Klik dua kali layanan untuk melihat kontrak dan operasi yang tersedia, tentukan namespace untuk kode yang dihasilkan, dan klik tombol OK .

Contoh

Contoh kode berikut menunjukkan kontrak layanan yang dibuat untuk layanan.

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
    <OperationContract()>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
    ' Other methods are not shown here.
End Interface

Alat utilitas Metadata ServiceModel dan Tambahkan Referensi Layanan di Visual Studio menghasilkan kelas klien WCF berikut. Kelas mewarisi dari kelas generik ClientBase<TChannel> dan mengimplementasikan ICalculator antarmuka. Alat ini juga menghasilkan ICalculator antarmuka (tidak ditampilkan di sini).

public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    public CalculatorClient()
    {}

    public CalculatorClient(string endpointConfigurationName) :
            base(endpointConfigurationName)
    {}

    public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
    {}

    public CalculatorClient(string endpointConfigurationName,
        System.ServiceModel.EndpointAddress remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
    {}

    public CalculatorClient(System.ServiceModel.Channels.Binding binding,
        System.ServiceModel.EndpointAddress remoteAddress) :
            base(binding, remoteAddress)
    {}

    public double Add(double n1, double n2)
    {
        return base.Channel.Add(n1, n2);
    }
}
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator

    Public Sub New()
        MyBase.New
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String)
        MyBase.New(endpointConfigurationName)
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String,
        ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub

    Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
        ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(binding, remoteAddress)
    End Sub

    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        Implements ICalculator.Add
        Return MyBase.Channel.Add(n1, n2)
    End Function
End Class

Menggunakan Klien WCF

Untuk menggunakan klien WCF, buat instans klien WCF, lalu panggil metodenya, seperti yang ditunjukkan dalam kode berikut.

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint");
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")

' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

Pengecualian Debugging yang Dilemparkan oleh Klien

Banyak pengecualian yang dilemparkan oleh klien WCF disebabkan oleh pengecualian pada layanan. Beberapa contohnya adalah:

  • SocketException: Koneksi yang ada ditutup secara paksa oleh host jarak jauh.

  • CommunicationException: Koneksi dasar ditutup secara tak terduga.

  • CommunicationObjectAbortedException: Koneksi soket digagalkan. Hal ini dapat disebabkan oleh kesalahan saat memproses pesan Anda, waktu habis penerimaan terlampaui oleh host jarak jauh, atau masalah sumber daya jaringan yang mendasar.

Ketika jenis pengecualian ini terjadi, cara terbaik untuk menyelesaikan masalah adalah dengan mengaktifkan pelacakan di sisi layanan dan menentukan pengecualian apa yang terjadi di sana. Untuk informasi selengkapnya tentang pelacakan, lihat Melacak dan Menggunakan Pelacakan untuk Memecahkan Masalah Aplikasi Anda.

Lihat juga