C# Language
Windows Communication Foundation
Recherche…
Introduction
Windows Communication Foundation (WCF) est un cadre pour la création d'applications orientées services. En utilisant WCF, vous pouvez envoyer des données en tant que messages asynchrones d'un point de terminaison de service à un autre. Un point de terminaison de service peut faire partie d'un service disponible en permanence hébergé par IIS ou d'un service hébergé dans une application. Les messages peuvent être aussi simples qu'un seul caractère ou mot envoyé en XML, ou aussi complexe qu'un flux de données binaires.
Exemple de démarrage
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.
// Define a service contract.
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
}
L'implémentation du service calcule et renvoie le résultat approprié, comme indiqué dans l'exemple de code suivant.
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
}
Le service expose un noeud final pour communiquer avec le service, défini à l'aide d'un fichier de configuration (Web.config), comme illustré dans l'exemple de configuration suivant.
<services>
<service
name="StackOverflow.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="StackOverflow.ServiceModel.Samples.ICalculator" />
...
</service>
</services>
Le framework n'expose pas les métadonnées par défaut. En tant que tel, le service active le ServiceMetadataBehavior et expose un point de terminaison d'échange de métadonnées à l' adresse http: //localhost/servicemodelsamples/service.svc/mex . La configuration suivante illustre cela.
<system.serviceModel>
<services>
<service
name="StackOverflow.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
...
<!-- the mex endpoint is explosed 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é en utilisant une classe client générée par l'outil de métadonnées ServiceModel (Svcutil.exe).
Exécutez la commande suivante à partir de l'invite de commande SDK dans le répertoire client pour générer le proxy typé:
svcutil.exe /n:"http://StackOverflow.ServiceModel.Samples,StackOverflow.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Comme le service, le client utilise un fichier de configuration (App.config) pour spécifier le noeud final avec lequel il souhaite communiquer. La configuration du noeud final client consiste en une adresse absolue pour le noeud final de service, la liaison et le contrat, comme illustré dans l'exemple suivant.
<client>
<endpoint
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
contract="StackOverflow.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 indiqué dans l'exemple de code suivant.
// 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);
//Closing the client releases all communication resources.
client.Close();