Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple GettingStarted montre comment implémenter un service classique et un client classique à l’aide de Windows Communication Foundation (WCF). Cet exemple est la base de tous les autres exemples de technologies de base.
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
Le service décrit les opérations qu’il effectue dans un contrat de service qu’il expose publiquement en tant que métadonnées. Le service contient également le code permettant d’implémenter les opérations.
Le client contient une définition du contrat de service et une classe proxy pour accéder au service. Le code proxy est généré à partir des métadonnées du service à l’aide de l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe).
Sur Windows Vista, le service est hébergé dans le service d’activation Windows (WAS). Sur Windows XP et Windows Server 2003, il est hébergé par Internet Information Services (IIS) et ASP.NET. L’hébergement d’un service dans IIS ou WAS permet au service d’être activé automatiquement lorsqu’il est accessible pour la première fois.
Remarque
Si vous préférez commencer à utiliser un exemple qui héberge le service dans une application console au lieu d’IIS, consultez l’exemple Auto-hôte .
Le service et le client spécifient les détails d’accès dans les paramètres du fichier de configuration, ce qui offre une flexibilité au moment du déploiement. Cela inclut une définition de point de terminaison qui spécifie une adresse, une liaison et un contrat. La liaison spécifie des détails de sécurité et de transport sur la manière dont le service doit être accédé.
Le service configure un comportement d’exécution pour publier ses métadonnées.
Le service implémente un contrat qui définit un modèle de communication de demande-réponse. Le contrat est défini par l’interface ICalculator , qui expose les opérations mathématiques (ajouter, soustraire, multiplier et diviser). Le client effectue des demandes à une opération mathématique donnée et le service répond avec le résultat. Le service implémente un ICalculator contrat défini dans le code suivant.
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
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
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
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);
}
L’implémentation du service calcule et retourne le résultat approprié, comme indiqué dans l’exemple de code suivant.
' Service class which implements the service contract.
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
// Service class that implements the service contract.
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;
}
}
Le service expose un point de terminaison pour communiquer avec le service, défini à l’aide d’un fichier de configuration (Web.config), comme indiqué dans l’exemple de configuration suivant.
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- ICalculator is exposed at the base address provided by
host: http://localhost/servicemodelsamples/service.svc. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
...
</service>
</services>
Le service expose le point de terminaison à l’adresse de base fournie par l’hôte IIS ou WAS. La liaison est configurée avec un standard WSHttpBinding, qui fournit des protocoles de communication HTTP et de service Web standard pour l’adressage et la sécurité. Le contrat correspond au ICalculator implémenté par le service.
Comme il est configuré, le service peut être accessible à http://localhost/servicemodelsamples/service.svc par un client sur le même ordinateur. Pour que les clients sur les ordinateurs distants accèdent au service, un nom de domaine complet doit être spécifié au lieu de localhost.
L’infrastructure n’expose pas les métadonnées par défaut. Par conséquent, le service active le ServiceMetadataBehavior et expose un point de terminaison d’échange de métadonnées (MEX) à http://localhost/servicemodelsamples/service.svc/mex. La configuration suivante illustre cela.
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
...
<!-- the mex endpoint is exposed at
http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<!--For debugging purposes set the includeExceptionDetailInFaults
attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Le client communique à l’aide d’un type de contrat donné à l’aide d’une classe cliente générée par l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe). Ce client généré est contenu dans le fichier generatedClient.cs ou generatedClient.vb. Cet utilitaire récupère les métadonnées d’un service donné et génère un client à utiliser par l’application cliente pour communiquer à l’aide d’un type de contrat donné. Le service hébergé doit être disponible pour générer le code client, car le service est utilisé pour récupérer les métadonnées mises à jour.
Exécutez la commande suivante à partir de l’invite de commandes du Kit de développement logiciel (SDK) 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/mex /out:generatedClient.cs
Pour générer le client en Visual Basic, tapez ce qui suit à partir de l’invite de commandes du Kit de développement logiciel (SDK) :
Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb
En utilisant le client généré, le client peut accéder à un point de terminaison de service donné 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 il souhaite 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 illustré dans l’exemple suivant.
<client>
<endpoint
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>
L’implémentation du client instancie le client et utilise l’interface typée pour commencer à communiquer avec le service, comme illustré dans l’exemple de code suivant.
' Create a client
Dim client As New CalculatorClient()
' Call the Add service operation.
Dim value1 = 100.0R
Dim value2 = 15.99R
Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)
' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)
' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
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
// Create a client.
CalculatorClient client = new CalculatorClient();
// 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 releases all communication resources.
client.Close();
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.
L’exemple d'introduction montre la méthode standard pour créer un service et un client. Les autres Bases s'appuient sur cet exemple pour présenter des fonctionnalités spécifiques du produit.
Pour configurer, générer et exécuter l’exemple
Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
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.
Pour exécuter l’exemple dans une configuration monoposte ou multiposte, suivez les instructions de Exécution des exemples Windows Communication Foundation.