Aracılığıyla paylaş


Nasıl yapılır: IIS'de WCF Hizmeti Barındırma

Bu konu başlığı altında, Internet Information Services'te (IIS) barındırılan bir Windows Communication Foundation (WCF) hizmeti oluşturmak için gereken temel adımlar özetlenmektedir. Bu konu başlığında, IIS hakkında bilgi sahibi olduğunuz ve IIS uygulamalarını oluşturmak ve yönetmek için IIS yönetim aracını nasıl kullanacağınızı anladığınız varsayılır. IIS hakkında daha fazla bilgi için bkz. Internet Information Services. IIS ortamında çalışan bir WCF hizmeti, işlem geri dönüşümü, boşta kapatma, işlem durumu izleme ve ileti tabanlı etkinleştirme gibi IIS özelliklerinden tam olarak yararlanır. Bu barındırma seçeneği IIS'nin düzgün yapılandırılmasını gerektirir, ancak uygulamanın bir parçası olarak herhangi bir barındırma kodunun yazılması gerekmez. IIS barındırmayı yalnızca bir HTTP aktarımıyla kullanabilirsiniz.

WCF ve ASP.NET etkileşimleri hakkında daha fazla bilgi için bkz . WCF Hizmetleri ve ASP.NET. Güvenliği yapılandırma hakkında daha fazla bilgi için bkz . Güvenlik.

Bu örneğin kaynak kopyası için bkz . Satır içi Kod Kullanarak IIS Barındırma.

IIS tarafından barındırılan bir hizmet oluşturmak için

  1. IIS'nin bilgisayarınızda yüklendiğini ve çalıştığını onaylayın. IIS'yi yükleme ve yapılandırma hakkında daha fazla bilgi için bkz. IIS 7.0'ı Yükleme ve Yapılandırma

  2. Uygulama dosyalarınız için "IISHostedCalcService" adlı yeni bir klasör oluşturun, ASP.NET klasörün içeriğine erişimi olduğundan emin olun ve iis yönetim aracını kullanarak bu uygulama dizininde fiziksel olarak bulunan yeni bir IIS uygulaması oluşturun. Uygulama dizini için bir diğer ad oluştururken "IISHostedCalc" kullanın.

  3. Uygulama dizininde "service.svc" adlı yeni bir dosya oluşturun. Aşağıdaki @ServiceHost öğeyi ekleyerek bu dosyayı düzenleyin.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
    
  4. Uygulama dizininde bir App_Code alt dizini oluşturun.

  5. App_Code alt dizininde Service.cs adlı bir kod dosyası oluşturun.

  6. aşağıdaki using yönergeleri Service.cs dosyasının en üstüne ekleyin.

    using System;
    using System.ServiceModel;
    
  7. Yönergelerin arkasına aşağıdaki ad alanı bildirimini using ekleyin.

    namespace Microsoft.ServiceModel.Samples
    {
    }
    
  8. Aşağıdaki kodda gösterildiği gibi ad alanı bildirimi içinde hizmet sözleşmesini tanımlayın.

    [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. Aşağıdaki kodda gösterildiği gibi hizmet sözleşmesi tanımından sonra hizmet sözleşmesini uygulayın.

    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. Uygulama dizininde "Web.config" adlı bir dosya oluşturun ve dosyaya aşağıdaki yapılandırma kodunu ekleyin. Çalışma zamanında WCF altyapısı, istemci uygulamalarının iletişim kurabileceği bir uç nokta oluşturmak için bu bilgileri kullanır.

    <?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>
    

    Bu örnek, yapılandırma dosyasındaki uç noktaları açıkça belirtir. Hizmete herhangi bir uç nokta eklemezseniz, çalışma zamanı sizin için varsayılan uç noktaları ekler. Varsayılan uç noktalar, bağlamalar ve davranışlar hakkında daha fazla bilgi için bkz. WCF Hizmetleri için Basitleştirilmiş Yapılandırma ve Basitleştirilmiş Yapılandırma.

  11. Hizmetin doğru barındırdığından emin olmak için bir tarayıcı açın ve hizmetin URL'sine göz atın: http://localhost/IISHostedCalc/Service.svc

Örnek

Iis barındırılan hesap makinesi hizmeti için kodun tam listesi aşağıdadır.

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>

Ayrıca bkz.