C# Language Exemple de démarrage


Exemple

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();