Sök…


Introduktion

Windows Communication Foundation (WCF) är ett ramverk för att bygga tjänstorienterade applikationer. Med WCF kan du skicka data som asynkrona meddelanden från en tjänständpunkt till en annan. En servicens slutpunkt kan vara en del av en kontinuerligt tillgänglig tjänst som värd av IIS, eller det kan vara en tjänst som är värd i en applikation. Meddelandena kan vara så enkla som ett enda tecken eller ord som skickas som XML, eller så komplexa som en ström av binär data.

Kom igång prov

Tjänsten beskriver de operationer som den utför i ett serviceavtal som den exponerar offentligt som metadata.

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

Tjänsteimplementeringen beräknar och returnerar rätt resultat, som visas i följande exempelkod.

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

Tjänsten avslöjar en slutpunkt för kommunikation med tjänsten, definierad med en konfigurationsfil (Web.config), som visas i följande provkonfiguration.

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

Ramverket exponerar inte metadata som standard. Som sådan aktiverar tjänsten ServiceMetadataBehavior och exponerar en metadata-utbytes (MEX) slutpunkt på http: //localhost/servicemodelsamples/service.svc/mex . Följande konfiguration visar detta.

<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 kommunicerar med en given kontraktstyp med en klientklass som genereras av ServiceModel Metadata Utility Tool (Svcutil.exe).

Kör följande kommando från SDK-kommandotolken i klientkatalogen för att generera den skrivna proxy:

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

Liksom tjänsten använder klienten en konfigurationsfil (App.config) för att specificera slutpunkten som den vill kommunicera med. Klientens slutpunktkonfiguration består av en absolut adress för servicens slutpunkt, bindningen och kontraktet, som visas i följande exempel.

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

Klientimplementeringen initierar klienten och använder det typade gränssnittet för att börja kommunicera med tjänsten, som visas i följande exempelkod.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow