Perilaku Penerbitan Metadata

Sampel metadata menunjukkan cara mengontrol fitur penerbitan metadata layanan. Untuk mencegah pengungkapan metadata layanan yang berpotensi sensitif secara tidak disengaja, konfigurasi default untuk layanan Windows Communication Foundation (WCF) menonaktifkan penerbitan metadata. Perilaku ini aman secara default, tetapi juga berarti Anda tidak dapat menggunakan alat impor metadata (seperti Svcutil.exe) untuk menghasilkan kode klien yang diperlukan untuk memanggil layanan kecuali perilaku penerbitan metadata layanan diaktifkan secara eksplisit dalam konfigurasi.

Penting

Untuk kejelasan, contoh ini menunjukkan cara membuat titik akhir penerbitan metadata yang tidak aman. Titik akhir tersebut berpotensi tersedia untuk konsumen anonim yang tidak diautentikasi dan perawatan harus diambil sebelum menyebarkan titik akhir tersebut untuk memastikan bahwa pengungkapan metadata layanan secara publik sesuai. Lihat sampel Titik Akhir Metadata Aman Kustom untuk sampel yang mengamankan titik akhir metadata.

Sampel didasarkan pada Memulai, yang mengimplementasikan kontrak layanan ICalculator. Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan di-hosting oleh Layanan Informasi Internet (IIS).

Catatan

Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.

Agar layanan dapat mengekspos metadata, ServiceMetadataBehavior harus dikonfigurasi pada layanan. Ketika perilaku ini ada, Anda dapat menerbitkan metadata dengan mengonfigurasi titik akhir untuk mengekspos kontrak IMetadataExchange sebagai implementasi protokol WS-MetadataExchange (MEX). Sebagai kenyamanan, kontrak ini telah diberi nama konfigurasi singkatan dari "IMetadataExchange". Sampel ini menggunakan mexHttpBinding, yang merupakan pengikatan standar kenyamanan yang setara untuk wsHttpBinding dengan mode keamanan yang diatur ke None. Alamat relatif "mex" digunakan di titik akhir, yang bila diselesaikan terhadap alamat dasar layanan menghasilkan alamat titik akhir http://localhost/servicemodelsamples/service.svc/mex. Berikut ini menunjukkan konfigurasi perilaku:

<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <!-- The serviceMetadata behavior publishes metadata through
           the IMetadataExchange contract. When this behavior is
           present, you can expose this contract through an endpoint
           as shown below. Setting httpGetEnabled to true publishes
           the service's WSDL at the <baseaddress>?wsdl, for example,
           http://localhost/servicemodelsamples/service.svc?wsdl -->
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Berikut ini memperlihatkan titik akhir MEX.

<!-- the MEX endpoint is exposed at
     http://localhost/servicemodelsamples/service.svc/mex
     To expose the IMetadataExchange contract, you
     must enable the serviceMetadata behavior as demonstrated
     previously. -->
<endpoint address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />

Sampel ini mengatur properti HttpGetEnabled ke true, yang juga mengekspos metadata layanan menggunakan HTTP GET. Untuk mengaktifkan titik akhir metadata HTTP GET, layanan harus memiliki alamat dasar HTTP. String kueri ?wsdl digunakan pada alamat dasar layanan untuk mengakses metadata. Misalnya, untuk melihat WSDL untuk layanan di browser Web, Anda akan menggunakan alamat http://localhost/servicemodelsamples/service.svc?wsdl. Atau, Anda dapat menggunakan perilaku ini untuk mengekspos metadata melalui HTTPS dengan mengatur HttpsGetEnabled ke true. Hal ini memerlukan alamat dasar HTTPS.

Untuk mengakses titik akhir MEX layanan, gunakan ServiceModel Metadata Utility Tool (Svcutil.exe).

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Hal ini menghasilkan klien berdasarkan metadata layanan.

Untuk mengakses metadata layanan menggunakan HTTP GET, arahkan browser Anda ke http://localhost/servicemodelsamples/service.svc?wsdl.

Jika Anda menghapus perilaku ini dan mencoba membuka layanan, Anda mendapatkan pengecualian. Kesalahan ini terjadi karena tanpa perilaku, titik akhir yang dikonfigurasi dengan kontrak IMetadataExchange tidak memiliki implementasi.

Jika Anda mengatur HttpGetEnabled ke false, Anda akan melihat halaman bantuan CalculatorService alih-alih melihat metadata layanan.

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.