Partager via


Comment : créer un service de style Web de base

Windows Communication Foundation (WCF) vous permet de créer un service qui expose un point de terminaison Web. Les points de terminaison Web envoient des données par XML brut, il n'y a aucune enveloppe SOAP. Cette rubrique explique comment exposer un tel point de terminaison.

Bb412178.note(fr-fr,VS.90).gifRemarque :
La seule méthode pour sécuriser un point de terminaison Web est de l'exposer à travers HTTPS, à l'aide de la sécurité de transport. Lors de l'utilisation de la sécurité basée sur message, les informations de sécurité sont placées habituellement dans les en-tête SOAP, car les messages envoyés aux points de terminaison non-SOAP ne contiennent aucune enveloppe SOAP ; on ne peut placer les informations de sécurité nulle part et vous devez compter sur la sécurité de transport.

Pour créer un point de terminaison Web

  1. Définissez un contrat de service à l'aide d'une interface marquée avec les attributs ServiceContractAttribute, WebInvokeAttribute et WebGetAttribute.

    Bb412178.note(fr-fr,VS.90).gifRemarque :
    Par défaut, WebInvokeAttribute mappe des appels POST à l'opération. Toutefois, vous pouvez spécifier la méthode pour mapper à l'opération un paramètre pour "method=". WebGetAttribute n'a pas de paramètre pour "method=" et mappe uniquement les appels GET à l'opération de service.

  2. Implémentez le contrat de service.

Pour héberger le service

  1. Créez un objet WebServiceHost.

  2. Ajoutez un ServiceEndpoint avec WebHttpBehavior.

    Bb412178.note(fr-fr,VS.90).gifRemarque :
    Si vous n'ajoutez pas de point de terminaison, WebServiceHost crée automatiquement un point de terminaison par défaut. WebServiceHost ajoute également WebHttpBehavior et désactive ainsi la page d'aide HTTP et la fonctionnalité GET de WSDL (Web Services Description Language) afin que le point de terminaison des métadonnées n'interfère pas avec le point de terminaison HTTP par défaut.

    Ajouter un point de terminaison non-SOAP avec une URL "" provoque un comportement inattendu en cas de tentative d'appeler une opération sur le point de terminaison. Cela est dû au fait que l'URI d'écoute du point de terminaison est le même que l'URI de la page d'aide (la page affichée lorsque vous naviguez jusqu'à l'adresse de base d'un service WCF).

    Vous pouvez recourir à l'une des actions suivantes pour l'empêcher :

    • Spécifiez toujours un URI non vierge pour un point de terminaison non-SOAP.
    • Désactivez la page d'aide. Cela peut être fait avec le code suivant.
  3. Ouvrez l'hôte de service et attendez jusqu'à ce que l'utilisateur appuie sur ENTRÉE.

    Cet exemple montre comment héberger un service de style Web avec une application console. Vous pouvez également héberger un tel service dans IIS. Pour cela, spécifiez la classe WebServiceHostFactory dans un fichier .svc, comme indiqué dans le code suivant.

    <%ServiceHost 
        language=c#
        Debug="true"
        Service="Microsoft.Samples.Service"
        Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
    

    Cet exemple configure impérativement l'hôte de service Web dans le code. Vous pouvez également le configurer dans un fichier de configuration de l'application. Le fichier de configuration de l'application suivant peut être utilisé pour effectuer la même configuration que le code décrit ci-dessus.

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    Pour utiliser le fichier de configuration de l'application, vous devez apporter quelques modifications au code précédent. Vous n'avez plus à spécifier l'adresse de base, les comportements du service ou les points de terminaison dans le code. L'exemple suivant illustre ce code modifié.

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

Pour appeler des opérations de service mappées à GET dans Internet Explorer

  1. Ouvrez Internet Explorer, entrez "https://localhost:8000/EchoWithGet?s=Hello, world!" et appuyez sur ENTRÉE. L'URL contient l'adresse de base du service ("https://localhost:8000/"), l'adresse relative du point de terminaison (""), l'opération de service à appeler ("EchoWithGet") et un point d'interrogation suivi par une liste de paramètres nommés séparés par un point-virgule (&).

Pour appeler des opérations de service dans le code

  1. Créez une instance de ChannelFactory dans un bloc using.

  2. Ajoutez WebHttpBehavior au point de terminaison que le ChannelFactory appellera.

  3. Créez le canal et appelez le service.

  4. Fermez le WebServiceHost.

Exemple

Les éléments suivants représentent l'intégralité du code pour cet exemple.

Compilation du code

Lors de la compilation de Service.cs, référencez System.ServiceModel.dll et System.ServiceModel.Web.dll.

Voir aussi

Référence

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior