Partager via


Procédure : configurer le service WCF pour interagir avec des clients de services web ASP.NET

Pour configurer un point de terminaison de service Windows Communication Foundation (WCF) de manière à ce qu’il puisse interagir avec des clients de services web ASP.NET, utilisez le type System.ServiceModel.BasicHttpBinding comme type de liaison pour votre point de terminaison de service.

Vous pouvez éventuellement activer la prise en charge du protocole HTTPS et de l'authentification du client au niveau du transport sur la liaison. Les clients de services web ASP.NET ne prennent pas en charge l'encodage de messages MTOM. La propriété BasicHttpBinding.MessageEncoding doit donc conserver sa valeur par défaut, soit WSMessageEncoding.Text. Les clients de services web ASP.NET ne prennent pas en charge la spécification WS-Security. BasicHttpBinding.Security doit donc avoir la valeur Transport.

Pour rendre les métadonnées d'un service WCF accessibles aux outils de génération de proxy de service web ASP.NET (à savoir Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe) et la fonctionnalité Ajouter une référence Web dans Visual Studio), vous devez exposer un point de terminaison de métadonnées HTTP/GET.

Ajouter un point de terminaison dans le code

  1. Créez une nouvelle instance BasicHttpBinding.

  2. Vous pouvez éventuellement activer la sécurité de transport pour cette liaison de point de terminaison de service en affectant au mode de sécurité de la liaison la valeur Transport. Pour plus d’informations, consultez Sécurité du transport.

  3. Ajoutez un nouveau point de terminaison d'application à votre hôte de service à l'aide de l'instance de liaison que vous venez de créer. Pour plus d’informations sur l’ajout d’un point de terminaison de service dans le code, consultez Guide pratique pour créer un point de terminaison de service dans le code.

  4. Activez un point de terminaison de métadonnées HTTP/GET pour votre service. Pour plus d’informations, consultez Guide pratique pour publier les métadonnées d’un service à l’aide de code.

Ajouter un point de terminaison dans un fichier config

  1. Créez une configuration de liaison BasicHttpBinding. Pour plus d’informations, consultez Guide pratique pour spécifier une liaison de service dans la configuration.

  2. Vous pouvez éventuellement activer la sécurité de transport pour la configuration de cette liaison de point de terminaison de service en affectant au mode de sécurité de la liaison la valeur Transport. Pour plus d’informations, consultez Sécurité du transport.

  3. Configurez un nouveau point de terminaison d’application pour votre service à l’aide de la configuration de liaison que vous venez de créer. Pour plus d’informations sur l’ajout d’un point de terminaison de service dans un fichier config, consultez Guide pratique pour créer un point de terminaison de service dans la configuration.

  4. Activez un point de terminaison de métadonnées HTTP/GET pour votre service. Pour plus d’informations, consultez Guide pratique pour publier des métadonnées pour un service à l’aide d’un fichier config.

Exemple

L'exemple de code ci-dessous montre comment ajouter un point de terminaison WCF compatible avec les clients de services web ASP.NET dans du code, ainsi que dans des fichiers config.

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

[ServiceContract]
public interface IEcho
{
    [OperationContract]
    string Echo(string s);
}

public class MyService : IEcho
{
    public string Echo(string s)
    {
        return s;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string baseAddress = "http://localhost:8080/wcfselfhost/";
        ServiceHost host = new ServiceHost(typeof(MyService), new Uri(baseAddress));

        // Create a BasicHttpBinding instance
        BasicHttpBinding binding = new BasicHttpBinding();

        // Add a service endpoint using the created binding
        host.AddServiceEndpoint(typeof(IEcho), binding, "echo1");

        host.Open();
        Console.WriteLine("Service listening on {0} . . .", baseAddress);
        Console.ReadLine();
        host.Close();
    }
}

Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports System.ServiceModel.Description

<ServiceContract()> _
Public Interface IEcho

    <OperationContract()> _
    Function Echo(ByVal s As String) As String

End Interface

Public Class MyService
    Implements IEcho

    Public Function Echo(ByVal s As String) As String Implements IEcho.Echo
        Return s
    End Function

End Class

Friend Class Program

    Shared Sub Main(ByVal args() As String)
        Dim baseAddress = "http://localhost:8080/wcfselfhost/"
        Dim host As New ServiceHost(GetType(MyService), _
                                    New Uri(baseAddress))

        ' Add a service endpoint using the created binding
        With host
            .AddServiceEndpoint(GetType(IEcho), _
                                New BasicHttpBinding(), _
                                "echo1")
            .Open()
            Console.WriteLine("Service listening on {0} . . .", _
                              baseAddress)
            Console.ReadLine()
            .Close()
        End With
    End Sub
End Class
<configuration>
  <system.serviceModel>
    <services>
      <service name="MyService" behaviorConfiguration="HttpGetMetadata">
        <endpoint address="echo2" contract="IEcho" binding="basicHttpBinding" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="HttpGetMetadata">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Voir aussi