Windows Communication Foundation

Windows Communication Foundation

Το Windows Communication Foundation (WCF) είναι ένα πλαίσιο για τη δημιουργία εφαρμογών προσανατολισμένων στις υπηρεσίες. Χρησιμοποιώντας το WCF, μπορείτε να στείλετε δεδομένα ως ασύγχρονα μηνύματα από το ένα τελικό σημείο υπηρεσίας στο άλλο. Ένα τελικό σημείο υπηρεσίας μπορεί να είναι μέρος μιας συνεχώς διαθέσιμης υπηρεσίας που φιλοξενείται από τις υπηρεσίες IIS ή μπορεί να είναι μια υπηρεσία που φιλοξενείται σε μια εφαρμογή. Τα μηνύματα μπορεί να είναι τόσο απλά όσο ένας χαρακτήρας ή λέξη που αποστέλλεται ως XML ή τόσο περίπλοκα όσο μια ροή δυαδικών δεδομένων.

# Δείγμα έναρξης

Η υπηρεσία περιγράφει τις λειτουργίες που εκτελεί σε μια σύμβαση παροχής υπηρεσιών που εκθέτει δημόσια ως μεταδεδομένα.

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

Η υλοποίηση της υπηρεσίας υπολογίζει και επιστρέφει το κατάλληλο αποτέλεσμα, όπως φαίνεται στο ακόλουθο παράδειγμα κώδικα.

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

Η υπηρεσία εκθέτει ένα τελικό σημείο για την επικοινωνία με την υπηρεσία, το οποίο ορίζεται χρησιμοποιώντας ένα αρχείο διαμόρφωσης (Web.config), όπως φαίνεται στο ακόλουθο δείγμα διαμόρφωσης.

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

Το πλαίσιο δεν εκθέτει τα μεταδεδομένα από προεπιλογή. Ως εκ τούτου, η υπηρεσία ενεργοποιεί το ServiceMetadataBehavior και εκθέτει ένα τελικό σημείο ανταλλαγής μεταδεδομένων (MEX) στη διεύθυνση http://localhost/servicemodelsamples/service.svc/mex . Η ακόλουθη διαμόρφωση το δείχνει αυτό.

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

Ο πελάτης επικοινωνεί χρησιμοποιώντας έναν συγκεκριμένο τύπο σύμβασης χρησιμοποιώντας μια κλάση πελάτη που δημιουργείται από το ServiceModel Metadata Utility Tool (Svcutil.exe).

Εκτελέστε την ακόλουθη εντολή από τη γραμμή εντολών SDK στον κατάλογο πελάτη για να δημιουργήσετε τον πληκτρολογημένο διακομιστή μεσολάβησης:

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

Όπως και η υπηρεσία, ο πελάτης χρησιμοποιεί ένα αρχείο διαμόρφωσης (App.config) για να καθορίσει το τελικό σημείο με το οποίο θέλει να επικοινωνήσει. Η διαμόρφωση τελικού σημείου πελάτη αποτελείται από μια απόλυτη διεύθυνση για το τελικό σημείο της υπηρεσίας, τη δέσμευση και τη σύμβαση, όπως φαίνεται στο ακόλουθο παράδειγμα.

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

Η υλοποίηση του προγράμματος-πελάτη εγκαινιάζει τον πελάτη και χρησιμοποιεί τη πληκτρολογημένη διεπαφή για να ξεκινήσει η επικοινωνία με την υπηρεσία, όπως φαίνεται στο ακόλουθο παράδειγμα κώδικα.

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