Share via


Mengakses Layanan Menggunakan Klien WCF

Setelah Anda membuat layanan, langkah selanjutnya adalah membuat proxy klien WCF. Aplikasi klien menggunakan proxy 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 hal berikut:

  1. Mengompilasi kode layanan.

  2. Hasilkan proxy klien WCF.

  3. Membuat instans proxy 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 proxy klien WCF menggunakan salah satu metode, layanan harus berjalan. Jika layanan di-host sendiri, Anda harus menjalankan hosting. Jika layanan di-host 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 definisi bahasa pemrogram 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 membuat 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 isinya digabungkan dengan konfigurasi yang dihasilkan dan ditulis ke dalam file kedua. Untuk informasi selengkapnya, 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 titik akhir Anda berkomunikasi adalah siapa yang mengatakannya, informasi yang Anda ambil mungkin metadata dari layanan berbahaya.

Menambahkan Referensi Layanan di Visual Studio

Dengan layanan berjalan, klik kanan proyek yang akan berisi proksi klien WCF dan pilih Tambahkan>Referensi Layanan. Dalam Menambahkan Dialog 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 Menambahkan 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 pada 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: Sambungan yang ada ditutup secara paksa oleh host jarak jauh.

  • CommunicationException: Koneksi yang mendasar ditutup secara tak terduga.

  • CommunicationObjectAbortedException: Koneksi soket dibatalkan. Ini bisa disebabkan oleh kesalahan pemrosesan pesan Anda, waktu istirahat yang diterima yang dilampaui oleh host jarak jauh, atau masalah sumber daya jaringan yang mendasarinya.

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 Penelusuran dan Menggunakan Penelusuran untuk Memecahkan Masalah Aplikasi Anda.

Lihat juga