Windows Communication Foundation

Windows Communication Foundation

Windows Communication Foundation (WCF) er en ramme til opbygning af serviceorienterede applikationer. Ved hjælp af WCF kan du sende data som asynkrone beskeder fra et tjenesteslutpunkt til et andet. Et serviceslutpunkt kan være en del af en konstant tilgængelig tjeneste, der hostes af IIS, eller det kan være en tjeneste, der hostes i en applikation. Beskederne kan være så enkle som et enkelt tegn eller ord sendt som XML, eller så komplekse som en strøm af binære data.

# Kom godt i gang eksempel

Tjenesten beskriver de operationer, den udfører i en servicekontrakt, som den eksponerer offentligt som metadata.

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

Serviceimplementeringen beregner og returnerer det relevante resultat, som vist i følgende eksempelkode.

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

Tjenesten viser et slutpunkt til kommunikation med tjenesten, defineret ved hjælp af en konfigurationsfil (Web.config), som vist i følgende eksempelkonfiguration.

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

Rammen eksponerer ikke metadata som standard. Som sådan aktiverer tjenesten ServiceMetadataBehavior og afslører et metadata exchange (MEX) slutpunkt på http://localhost/servicemodelsamples/service.svc/mex . Den følgende konfiguration demonstrerer dette.

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

Klienten kommunikerer ved hjælp af en given kontrakttype ved at bruge en klientklasse, der er genereret af ServiceModel Metadata Utility Tool (Svcutil.exe).

Kør følgende kommando fra SDK-kommandoprompten i klientbiblioteket for at generere den indtastede proxy:

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

Ligesom tjenesten bruger klienten en konfigurationsfil (App.config) til at angive det endepunkt, som den ønsker at kommunikere med. Klientens slutpunktskonfiguration består af en absolut adresse for serviceslutpunktet, bindingen og kontrakten, som vist i følgende eksempel.

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

Klientimplementeringen instansierer klienten og bruger den indtastede grænseflade til at begynde at kommunikere med tjenesten, som vist i følgende eksempelkode.

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