Deskripsi Layanan

Sampel ServiceDescription menunjukkan bagaimana layanan dapat mengambil informasi deskripsi layanannya saat runtime. Sampel ini didasarkan pada Memulai, dengan mendefinisikan operasi layanan tambahan untuk mengembalikan informasi deskriptif tentang layanan ini. Informasi yang dikembalikan mencantumkan alamat dasar dan titik akhir untuk layanan. Layanan ini menyediakan informasi ini menggunakan OperationContextkelas , ServiceHost, dan ServiceDescription .

Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan dihosting oleh Internet Information Services (IIS).

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Sampel ini memiliki versi kontrak kalkulator yang dimodifikasi yang disebut IServiceDescriptionCalculator. Kontrak menentukan operasi layanan tambahan bernama GetServiceDescriptionInfo yang mengembalikan string multibaris ke klien yang menjelaskan alamat dasar atau alamat dan titik akhir layanan atau titik akhir untuk layanan.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface IServiceDescriptionCalculator
{
    [OperationContract]
    int Add(int n1, int n2);
    [OperationContract]
    int Subtract(int n1, int n2);
    [OperationContract]
    int Multiply(int n1, int n2);
    [OperationContract]
    int Divide(int n1, int n2);
    [OperationContract]
    string GetServiceDescriptionInfo();
}

Kode implementasi untuk GetServiceDescriptionInfo menggunakan ServiceDescription untuk mencantumkan titik akhir layanan. Karena titik akhir layanan dapat memiliki alamat relatif, pertama-tama dicantumkan alamat dasar untuk layanan tersebut. Untuk mendapatkan semua informasi ini, kode mendapatkan konteks operasinya menggunakan Current. Objek ServiceHost dan ServiceDescription diambil dari konteks operasi. Untuk mencantumkan titik akhir dasar untuk layanan, kode melakukan iterasi melalui koleksi host BaseAddresses layanan. Untuk mencantumkan endpoint layanan untuk layanan, kode melakukan iterasi melalui koleksi endpoint dalam deskripsi layanan.

public string GetServiceDescriptionInfo()
{
    string info = "";
    OperationContext operationContext = OperationContext.Current;
    ServiceHost host = (ServiceHost)operationContext.Host;
    ServiceDescription desc = host.Description;
    // Enumerate the base addresses in the service host.
    info += "Base addresses:\n";
    foreach (Uri uri in host.BaseAddresses)
    {
        info += "    " + uri + "\n";
    }
    // Enumerate the service endpoints in the service description.
    info += "Service endpoints:\n";
    foreach (ServiceEndpoint endpoint in desc.Endpoints)
    {
        info += "    Address:  " + endpoint.Address + "\n";
        info += "    Binding:  " + endpoint.Binding.Name + "\n";
        info += "    Contract: " + endpoint.Contract.Name + "\n";
    }
     return info;
}

Saat menjalankan sampel, Anda akan melihat operasi kalkulator dan kemudian informasi layanan yang dikembalikan oleh operasi GetServiceDescriptionInfo. Tekan ENTER di jendela klien untuk mematikan klien.

Add(15,3) = 18
Subtract(145,76) = 69
Multiply(9,81) = 729
Divide(22,7) = 3
GetServiceDescriptionInfo
Base addresses:
    http://<machine-name>/ServiceModelSamples/service.svc
    https://<machine-name>/ServiceModelSamples/service.svc
Service endpoints:
    Address:  http://<machine-name>/ServiceModelSamples/service.svc
    Binding:  WSHttpBinding
    Contract: IServiceDescriptionCalculator
    Address:  http://<machine-name>/ServiceModelSamples/service.svc/mex
    Binding:  MetadataExchangeHttpBinding
    Contract: IMetadataExchange

Press <ENTER> to terminate client.

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.