Partager via


Interopérabilité avec les services web ASMX

L’exemple ASMX montre comment intégrer une application cliente Windows Communication Foundation (WCF) à un service web ASMX existant.

Remarque

La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.

Cet exemple se compose d’un programme de console client (.exe) et d’une bibliothèque de services (.dll) hébergée par Internet Information Services (IIS). Le service est un service web ASMX qui implémente un contrat qui définit un modèle de communication de demande-réponse. Le service expose les opérations mathématiques (Add, , SubtractMultiply, et Divide). Le client effectue des requêtes synchrones à une opération mathématique et le service répond avec le résultat. L’activité du client est visible dans la fenêtre de console.

L’implémentation du service web ASMX indiquée dans l’exemple de code suivant calcule et retourne le résultat approprié.

[WebService(Namespace="http://Microsoft.ServiceModel.Samples")]
public class CalculatorService : System.Web.Services.WebService
    {
        [WebMethod]
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        [WebMethod]
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        [WebMethod]
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        [WebMethod]
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    }

Dans sa configuration actuelle, le service est accessible à http://localhost/servicemodelsamples/service.asmx par un client de la même machine. Pour que les clients sur des ordinateurs distants accèdent au service, un nom de domaine qualifié doit être spécifié au lieu de localhost.

La communication est effectuée via un client généré par l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe). Le client est contenu dans le fichier generatedClient.cs. Le service ASMX doit être disponible pour générer le code proxy, car il est utilisé pour récupérer les métadonnées mises à jour. Exécutez la commande suivante à partir d’une invite de commandes dans le répertoire client pour générer le proxy typé.

svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedClient.cs

À l’aide du client généré, vous pouvez accéder à un point de terminaison de service en configurant l’adresse et la liaison appropriées. Comme le service, le client utilise un fichier de configuration (App.config) pour spécifier le point de terminaison avec lequel communiquer. La configuration du point de terminaison client se compose d’une adresse absolue pour le point de terminaison de service, la liaison et le contrat, comme indiqué dans l’exemple de configuration suivant.

<client>
   <endpoint
      address="http://localhost/ServiceModelSamples/service.asmx"
      binding="basicHttpBinding"
      contract="Microsoft.ServiceModel.Samples.CalculatorServiceSoap" />
</client>

L’implémentation du client construit une instance du client généré. Le client généré peut ensuite être utilisé pour communiquer avec le service.

// Create a client.
CalculatorServiceSoapClient client = new CalculatorServiceSoapClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client gracefully closes the connection and cleans up resources.
client.Close();

Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();

Lorsque vous exécutez l’exemple, les demandes et réponses de l’opération s’affichent dans la fenêtre de la console cliente. Appuyez sur Entrée dans la fenêtre du client pour arrêter le client.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Pour configurer, générer et exécuter l’exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.

  3. Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.