Procédure : héberger un service WCF dans IISHow to: Host a WCF Service in IIS

Cette rubrique décrit les étapes de base requises pour créer un service Windows Communication Foundation (WCF) hébergé dans Internet Information Services (IIS).This topic outlines the basic steps required to create a Windows Communication Foundation (WCF) service that is hosted in Internet Information Services (IIS). Dans cette rubrique, on suppose que vous connaissez IIS et que vous comprenez la manière d'utiliser l'outil d'administration IIS pour créer et gérer des applications IIS.This topic assumes you are familiar with IIS and understand how to use the IIS management tool to create and manage IIS applications. Pour plus d’informations sur IIS, consultez Internet Information Services.For more information about IIS see Internet Information Services. Un service WCF qui s’exécute dans l’environnement IIS tire pleinement parti des fonctionnalités d’IIS, telles que le recyclage de processus, l’arrêt inactif, le contrôle d’intégrité des processus et l’activation basée sur des messages.A WCF service that runs in the IIS environment takes full advantage of IIS features, such as process recycling, idle shutdown, process health monitoring, and message-based activation. Cette option d'hébergement requiert que les services IIS soient configurés correctement, mais n'exige pas l'écriture d'un code d'hébergement dans le cadre de l'application.This hosting option requires that IIS be properly configured, but it does not require that any hosting code be written as part of the application. Vous pouvez utiliser l'hébergement IIS uniquement avec un transport HTTP.You can use IIS hosting only with an HTTP transport.

Pour plus d’informations sur la façon dont WCF et ASP.NET interagissent, consultez services WCF et ASP.net.For more information about how WCF and ASP.NET interact, see WCF Services and ASP.NET. Pour plus d’informations sur la configuration de la sécurité, consultez sécurité.For more information about configuring security, see Security.

Pour obtenir la copie source de cet exemple, consultez l’hébergement IIS à l’aide du code inline.For the source copy of this example, see IIS Hosting Using Inline Code.

Pour créer un service hébergé par IISTo create a service hosted by IIS

  1. Vérifiez que les services IIS sont installés et s'exécutent sur votre ordinateur.Confirm that IIS is installed and running on your computer. Pour plus d’informations sur l’installation et la configuration d’IIS, consultez installation et configuration d’iis 7,0For more information about installing and configuring IIS see Installing and Configuring IIS 7.0

  2. Créez un nouveau dossier pour vos fichiers d’application appelé « IISHostedCalcService », vérifiez que ASP.NET a accès au contenu du dossier et utilisez l’outil de gestion IIS pour créer une application IIS qui se trouve physiquement dans ce répertoire d’application.Create a new folder for your application files called "IISHostedCalcService", ensure that ASP.NET has access to the contents of the folder, and use the IIS management tool to create a new IIS application that is physically located in this application directory. Lors de la création d'un alias pour le répertoire de l'application, utilisez « IISHostedCalc ».When creating an alias for the application directory use "IISHostedCalc".

  3. Créez un fichier appelé « service.svc » dans le répertoire de l'application.Create a new file named "service.svc" in the application directory. Modifiez ce fichier en ajoutant l’élément @ServiceHost suivant.Edit this file by adding the following @ServiceHost element.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
    
  4. Créez un sous-répertoire App_Code dans le répertoire de l'application.Create an App_Code subdirectory within the application directory.

  5. Créez un fichier de code nommé Service.cs dans le sous-répertoire App_Code.Create a code file named Service.cs in the App_Code subdirectory.

  6. Ajoutez les instructions using suivantes en tête du fichier Service.cs.Add the following using statements to the top of the Service.cs file.

    using System;  
    using System.ServiceModel;  
    
  7. Ajoutez la déclaration d'espace de noms suivante à la suite des instructions using.Add the following namespace declaration after the using statements.

    namespace Microsoft.ServiceModel.Samples  
    {  
    }  
    
  8. Définissez le contrat de service à l'intérieur de la déclaration d'espace de noms, tel qu'indiqué dans le code suivant.Define the service contract inside the namespace declaration as shown in the following code.

    [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. Implémentez le contrat de service après la définition du contrat de service, tel qu'indiqué dans le code suivant.Implement the service contract after the service contract definition as shown in the following code.

    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. Créez un fichier nommé « Web.config » dans le répertoire de l'application et ajoutez le code de configuration suivant dans le fichier.Create a file named "Web.config" in the application directory and add the following configuration code into the file. Lors de l’exécution, l’infrastructure WCF utilise les informations pour construire un point de terminaison avec lequel les applications clientes peuvent communiquer.At runtime, the WCF infrastructure uses the information to construct an endpoint that client applications can communicate with.

    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="Microsoft.ServiceModel.Samples.CalculatorService">
    
            <!-- 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 explosed at http://localhost/servicemodelsamples/service.svc/mex -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    
    </configuration>
    
    

    L'exemple spécifie explicitement les points de terminaison dans le fichier de configuration.This example explicitly specifies endpoints in the configuration file. Si vous n'ajoutez pas de points de terminaison au service, le runtime ajoute les points de terminaison par défaut.If you do not add any endpoints to the service, the runtime adds default endpoints for you. Pour plus d’informations sur les points de terminaison, les liaisons et les comportements par défaut, consultez configuration simplifiée et configuration simplifiée pour les services WCF.For more information about default endpoints, bindings, and behaviors see Simplified Configuration and Simplified Configuration for WCF Services.

  11. Pour vous assurer que le service est hébergé correctement, ouvrez une instance d'Internet Explorer et naviguez jusqu'à l'URL du service : http://localhost/IISHostedCalc/Service.svcTo make sure the service is hosted correctly, open an instance of Internet Explorer and browse to the service's URL: http://localhost/IISHostedCalc/Service.svc

ExempleExample

L'intégralité du code pour le service de calculatrice hébergé IIS est présentée ci-dessous.The following is a complete listing of the code for the IIS hosted calculator service.

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

        <!-- 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 explosed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

</configuration>

Voir aussiSee also