Bagikan melalui


Cara: Menghosting Layanan WCF di IIS

Topik ini menguraikan langkah-langkah dasar yang diperlukan untuk membuat layanan Windows Communication Foundation (WCF) yang dihosting di Layanan Informasi Internet (IIS). Topik ini mengasumsikan bahwa Anda terbiasa dengan IIS dan memahami cara menggunakan alat manajemen IIS untuk membuat dan mengelola aplikasi IIS. Untuk informasi selengkapnya tentang IIS lihat Layanan Informasi Internet. Layanan WCF yang berjalan di lingkungan IIS memanfaatkan sepenuhnya fitur IIS, seperti daur ulang proses, matikan mode diam, pemantauan kesehatan proses, dan aktivasi berbasis pesan. Opsi hosting ini mengharuskan IIS dikonfigurasi dengan benar, tetapi tidak mengharuskan kode hosting ditulis sebagai bagian dari aplikasi. Anda dapat menggunakan hosting IIS hanya dengan transportasi HTTP.

Untuk informasi selengkapnya tentang bagaimana WCF dan ASP.NET berinteraksi, lihat Layanan dan ASP.NET WCF. Untuk informasi selengkapnya tentang mengonfigurasi keamanan, lihat Keamanan.

Untuk salinan sumber contoh ini, lihat IIS Hosting Menggunakan Kode Sebaris.

Untuk membuat layanan yang dihosting oleh IIS

  1. Konfirmasikan bahwa IIS terpasang dan berjalan di komputer Anda. Untuk informasi selengkapnya tentang memasang dan mengonfigurasi IIS, lihat Memasang dan Mengonfigurasi IIS 7.0

  2. Buat folder baru untuk file aplikasi Anda yang disebut "IISHostedCalcService", pastikan bahwa ASP.NET memiliki akses ke konten folder, dan gunakan alat manajemen IIS untuk membuat aplikasi IIS baru yang secara fisik terletak di direktori aplikasi ini. Saat membuat alias untuk direktori aplikasi, gunakan "IISHostedCalc".

  3. Buat file baru bernama “service.svc” dalam direktori aplikasi. Edit file ini dengan menambahkan elemen berikut @ServiceHost.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
    
  4. Buat subdirektori App_Code dalam direktori aplikasi.

  5. Buat file kode bernama Service.cs di subdirektori App_Code.

  6. Tambahkan arahan berikut using ke bagian atas file Service.cs.

    using System;
    using System.ServiceModel;
    
  7. Tambahkan deklarasi namespace berikut setelah direktif using .

    namespace Microsoft.ServiceModel.Samples
    {
    }
    
  8. Tentukan kontrak layanan di dalam deklarasi namespace seperti yang ditunjukkan dalam kode berikut.

    [ServiceContract]
    public interface ICalculator
    {
       [OperationContract]
       double Add(double n1, double n2);
       [OperationContract]
       double Subtract(double n1, double n2);
       [OperationContract]
       double Multiply(double n1, double n2);
       [OperationContract]
       double Divide(double n1, double n2);
    }
    
    
    <ServiceContract()> _
    Public Interface ICalculator
    
        <OperationContract()> _
        Function Add(ByVal n1 As Double, _
                       ByVal n2 As Double) As Double
    
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, _
                          ByVal n2 As Double) As Double
    
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, _
                          ByVal n2 As Double) As Double
    
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, _
                        ByVal n2 As Double) As Double
    End Interface
    
    
  9. Terapkan kontrak layanan setelah definisi kontrak layanan seperti yang ditunjukkan dalam kode berikut.

    public class CalculatorService : ICalculator
    {
       public double Add(double n1, double n2)
       {
          return n1 + n2;
       }
       public double Subtract(double n1, double n2)
       {
          return n1 - n2;
       }
       public double Multiply(double n1, double n2)
       {
          return n1 * n2;
       }
       public double Divide(double n1, double n2)
       {
          return n1 / n2;
       }
    }
    
    Public Class CalculatorService
        Implements ICalculator
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function
    
        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function
    
        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function
    
        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    End Class
    
    
  10. Buat file bernama "Web.config" di direktori aplikasi dan tambahkan kode konfigurasi berikut ke dalam file. Pada durasi, infrastruktur WCF menggunakan informasi untuk membangun titik akhir yang dapat dikomunikasikan oleh aplikasi klien.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehaviors">
    
            <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
            <endpoint address=""
                      binding="wsHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.ICalculator" />
    
            <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="CalculatorServiceBehaviors">
              <!-- Add the following element to your service behavior configuration. -->
              <serviceMetadata httpGetEnabled="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    
    </configuration>
    

    Contoh ini secara eksplisit menentukan titik akhir dalam file konfigurasi. Jika Anda tidak menambahkan titik akhir apa pun ke layanan, runtime bahasa umum menambahkan titik akhir default untuk Anda. Untuk informasi selengkapnya tentang titik akhir, pengikatan, dan perilaku default, lihat Konfigurasi Sederhana dan Konfigurasi Sederhana untuk Layanan WCF.

  11. Untuk memastikan layanan dihosting dengan benar, buka browser dan telusuri KE URL layanan: http://localhost/IISHostedCalc/Service.svc

Contoh

Berikut ini adalah daftar lengkap kode untuk layanan kalkulator yang dihosting IIS.

using System;
using System.ServiceModel;

namespace Microsoft.ServiceModel.Samples
{

  [ServiceContract]
  public interface ICalculator
  {
     [OperationContract]
     double Add(double n1, double n2);
     [OperationContract]
     double Subtract(double n1, double n2);
     [OperationContract]
     double Multiply(double n1, double n2);
     [OperationContract]
     double Divide(double n1, double n2);
  }


  public class CalculatorService : ICalculator
  {
     public double Add(double n1, double n2)
     {
        return n1 + n2;
     }
     public double Subtract(double n1, double n2)
     {
        return n1 - n2;
     }
     public double Multiply(double n1, double n2)
     {
        return n1 * n2;
     }
     public double Divide(double n1, double n2)
     {
        return n1 / n2;
     }
  }
}

Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples

    <ServiceContract()> _
    Public Interface ICalculator

        <OperationContract()> _
        Function Add(ByVal n1 As Double, _
                       ByVal n2 As Double) As Double

        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, _
                          ByVal n2 As Double) As Double

        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, _
                          ByVal n2 As Double) As Double

        <OperationContract()> _
        Function Divide(ByVal n1 As Double, _
                        ByVal n2 As Double) As Double
    End Interface


    Public Class CalculatorService
        Implements ICalculator
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function

        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function

        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function

        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    End Class

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehaviors">

        <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehaviors">
          <!-- Add the following element to your service behavior configuration. -->
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Lihat juga