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, sampel ini menunjukkan cara membuat titik akhir penerbitan metadata yang tidak aman. Titik akhir tersebut berpotensi tersedia untuk konsumen anonim dan tanpa autentikasi. Perhatian harus diberikan sebelum menggunakan 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 ini didasarkan pada panduan Memulai, yang mengimplementasikan ICalculator kontrak layanan. 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.

Agar layanan mengekspos metadata, ServiceMetadataBehavior harus dikonfigurasi pada layanan. Jika perilaku ini ada, Anda dapat menerbitkan metadata dengan mengonfigurasi titik akhir untuk mengekspos kontrak IMetadataExchange sebagai implementasi dari protokol WS-MetadataExchange (MEX). Untuk kemudahan, kontrak ini telah diberi nama singkatan "IMetadataExchange". Sampel ini menggunakan mexHttpBinding, yang merupakan pengikatan standar kenyamanan yang setara wsHttpBinding dengan dengan mode keamanan yang diatur ke None. Alamat relatif "mex" digunakan di titik akhir, yang ketika diselesaikan terhadap alamat dasar layanan menghasilkan alamat http://localhost/servicemodelsamples/service.svc/mextitik akhir . 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 HttpGetEnabled properti ke true, yang juga mengekspos metadata layanan menggunakan HTTP GET. Untuk mengaktifkan titik akhir metadata HTTP GET, layanan harus memiliki alamat dasar HTTP. Kueri string ?wsdl digunakan pada URL 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. 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

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 fungsi, endpoint 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, 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.