Windows Communication Foundation

 C Programming >> C C# Program >  >> C#
Windows Communication Foundation

Windows Communication Foundation (WCF) er et rammeverk for å bygge tjenesteorienterte applikasjoner. Ved å bruke WCF kan du sende data som asynkrone meldinger fra ett tjenesteendepunkt til et annet. Et tjenesteendepunkt kan være en del av en kontinuerlig tilgjengelig tjeneste hostet av IIS, eller det kan være en tjeneste som er vert i en applikasjon. Meldingene kan være så enkle som et enkelt tegn eller ord sendt som XML, eller så komplekse som en strøm av binære data.

# Komme i gang eksempel

Tjenesten beskriver operasjonene den utfører i en tjenestekontrakt som den viser offentlig som metadata.

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

Tjenesteimplementeringen beregner og returnerer riktig 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 endepunkt for kommunikasjon med tjenesten, definert ved hjelp av en konfigurasjonsfil (Web.config), som vist i følgende eksempelkonfigurasjon.

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

Rammeverket avslører ikke metadata som standard. Som sådan slår tjenesten på ServiceMetadataBehavior og avslører et endepunkt for metadatautveksling (MEX) på http://localhost/servicemodelsamples/service.svc/mex . Følgende konfigurasjon 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 kommuniserer ved hjelp av en gitt kontraktstype ved å bruke en klientklasse som er generert av ServiceModel Metadata Utility Tool (Svcutil.exe).

Kjør følgende kommando fra SDK-ledeteksten i klientkatalogen for å generere den innskrevne proxyen:

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

I likhet med tjenesten bruker klienten en konfigurasjonsfil (App.config) for å spesifisere endepunktet den ønsker å kommunisere med. Klientendepunktkonfigurasjonen består av en absolutt adresse for tjenesteendepunktet, 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 bruker det maskinskrevne grensesnittet for å begynne å kommunisere 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