Fondamento di comunicazione di Windows

Fondamento di comunicazione di Windows

Windows Communication Foundation (WCF) è un framework per la creazione di applicazioni orientate ai servizi. Usando WCF, puoi inviare dati come messaggi asincroni da un endpoint del servizio a un altro. Un endpoint del servizio può essere parte di un servizio continuamente disponibile ospitato da IIS oppure può essere un servizio ospitato in un'applicazione. I messaggi possono essere semplici come un singolo carattere o una parola inviata come XML o complessi come un flusso di dati binari.

# Esempio per iniziare

Il servizio descrive le operazioni che esegue in un contratto di servizio che espone pubblicamente come metadati.

// Define a service contract.  
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]  
public interface ICalculator  
{  
    [OperationContract]  
    double Add(double n1, double n2);
}

L'implementazione del servizio calcola e restituisce il risultato appropriato, come mostrato nel codice di esempio seguente.

// Service class that implements the service contract.  
public class CalculatorService : ICalculator  
{  
    public double Add(double n1, double n2)  
    {  
        return n1 + n2;  
    }
}

Il servizio espone un endpoint per la comunicazione con il servizio, definito utilizzando un file di configurazione (Web.config), come illustrato nella configurazione di esempio seguente.

<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>

Il framework non espone i metadati per impostazione predefinita. Di conseguenza, il servizio attiva ServiceMetadataBehavior ed espone un endpoint di scambio di metadati (MEX) in http://localhost/servicemodelsamples/service.svc/mex . La configurazione seguente lo dimostra.

<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>  

Il client comunica utilizzando un determinato tipo di contratto utilizzando una classe client generata dallo strumento ServiceModel Metadata Utility Tool (Svcutil.exe).

Eseguire il comando seguente dal prompt dei comandi dell'SDK nella directory del client per generare il proxy digitato:

svcutil.exe /n:"http://StackOverflow.ServiceModel.Samples,StackOverflow.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs  

Come il servizio, il client usa un file di configurazione (App.config) per specificare l'endpoint con cui desidera comunicare. La configurazione dell'endpoint client è costituita da un indirizzo assoluto per l'endpoint del servizio, l'associazione e il contratto, come mostrato nell'esempio seguente.

<client>  
     <endpoint  
         address="http://localhost/servicemodelsamples/service.svc"   
         binding="wsHttpBinding"   
         contract="StackOverflow.ServiceModel.Samples.ICalculator" />  
</client>  

L'implementazione client crea un'istanza del client e utilizza l'interfaccia tipizzata per iniziare a comunicare con il servizio, come mostrato nel codice di esempio seguente.

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


No