Windows Communication Foundation

Windows Communication Foundation

Windows Communication Foundation (WCF) is een raamwerk voor het bouwen van servicegerichte applicaties. Met WCF kunt u gegevens als asynchrone berichten van het ene service-eindpunt naar het andere verzenden. Een service-eindpunt kan deel uitmaken van een continu beschikbare service die wordt gehost door IIS, of het kan een service zijn die wordt gehost in een toepassing. De berichten kunnen zo eenvoudig zijn als een enkel teken of woord dat als XML wordt verzonden, of zo complex als een stroom binaire gegevens.

# Aan de slag-voorbeeld

De service beschrijft de bewerkingen die hij uitvoert in een servicecontract dat hij openbaar maakt als metadata.

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

De service-implementatie berekent en retourneert het juiste resultaat, zoals weergegeven in de volgende voorbeeldcode.

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

De service onthult een eindpunt voor communicatie met de service, gedefinieerd met behulp van een configuratiebestand (Web.config), zoals weergegeven in de volgende voorbeeldconfiguratie.

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

Het framework stelt standaard geen metadata beschikbaar. Als zodanig schakelt de service het ServiceMetadataBehavior in en onthult een metadata-uitwisselingseindpunt (MEX) op http://localhost/servicemodelsamples/service.svc/mex . De volgende configuratie toont dit aan.

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

De klant communiceert met behulp van een bepaald contracttype met behulp van een klantklasse die wordt gegenereerd door de ServiceModel Metadata Utility Tool (Svcutil.exe).

Voer de volgende opdracht uit vanaf de SDK-opdrachtprompt in de clientdirectory om de getypte proxy te genereren:

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

Net als de service gebruikt de client een configuratiebestand (App.config) om het eindpunt op te geven waarmee hij wil communiceren. De configuratie van het client-eindpunt bestaat uit een absoluut adres voor het service-eindpunt, de binding en het contract, zoals weergegeven in het volgende voorbeeld.

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

De clientimplementatie maakt een instantie van de client en gebruikt de getypte interface om te beginnen met communiceren met de service, zoals weergegeven in de volgende voorbeeldcode.

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