Dela via


Anvisningar: Värd för en WCF-tjänst i IIS

Det här avsnittet beskriver de grundläggande steg som krävs för att skapa en WCF-tjänst (Windows Communication Foundation) som finns i IIS (Internet Information Services). Det här avsnittet förutsätter att du är bekant med IIS och förstår hur du använder IIS-hanteringsverktyget för att skapa och hantera IIS-program. Mer information om IIS finns i Internet Information Services. En WCF-tjänst som körs i IIS-miljön drar full nytta av IIS-funktioner, till exempel processåtervinning, inaktiv avstängning, övervakning av processhälsa och meddelandebaserad aktivering. Det här värdalternativet kräver att IIS är korrekt konfigurerat, men det kräver inte att någon värdkod skrivs som en del av programmet. Du kan endast använda IIS-värdtjänster med en HTTP-transport.

Mer information om hur WCF och ASP.NET interagerar finns i WCF-tjänster och ASP.NET. Mer information om hur du konfigurerar säkerhet finns i Säkerhet.

Källkopian av det här exemplet finns i IIS Hosting Using Inline Code (IIS-värd med infogad kod).

Så här skapar du en tjänst som hanteras av IIS

  1. Bekräfta att IIS är installerat och körs på datorn. Mer information om hur du installerar och konfigurerar IIS finns i Installera och konfigurera IIS 7.0

  2. Skapa en ny mapp för dina programfiler med namnet "IISHostedCalcService", se till att ASP.NET har åtkomst till innehållet i mappen och använd IIS-hanteringsverktyget för att skapa ett nytt IIS-program som finns fysiskt i den här programkatalogen. När du skapar ett alias för programkatalogen använder du "IISHostedCalc".

  3. Skapa en ny fil med namnet "service.svc" i programkatalogen. Redigera den här filen genom att lägga till följande @ServiceHost element.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
    
  4. Skapa en App_Code underkatalog i programkatalogen.

  5. Skapa en kodfil med namnet Service.cs i underkatalogen App_Code.

  6. Lägg till följande using direktiv överst i filen Service.cs.

    using System;
    using System.ServiceModel;
    
  7. Lägg till följande namnområdesdeklaration efter direktiven using .

    namespace Microsoft.ServiceModel.Samples
    {
    }
    
  8. Definiera tjänstkontraktet i namnområdesdeklarationen enligt följande kod.

    [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. Implementera tjänstkontraktet efter definitionen av tjänstkontraktet enligt följande kod.

    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. Skapa en fil med namnet "Web.config" i programkatalogen och lägg till följande konfigurationskod i filen. Vid körning använder WCF-infrastrukturen informationen för att konstruera en slutpunkt som klientprogram kan kommunicera med.

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

    Det här exemplet anger uttryckligen slutpunkter i konfigurationsfilen. Om du inte lägger till några slutpunkter i tjänsten lägger körningen till standardslutpunkter åt dig. Mer information om standardslutpunkter, bindningar och beteenden finns i Förenklad konfiguration och förenklad konfiguration för WCF-tjänster.

  11. Om du vill kontrollera att tjänsten är korrekt värd öppnar du en webbläsare och bläddrar till tjänstens URL: http://localhost/IISHostedCalc/Service.svc

Exempel

Följande är en fullständig lista över koden för den IIS-värdbaserade kalkylatortjänsten.

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>

Se även