Suche…


Einführung

Windows Communication Foundation (WCF) ist ein Framework zum Erstellen von serviceorientierten Anwendungen. Mit WCF können Sie Daten als asynchrone Nachrichten von einem Serviceendpunkt an einen anderen senden. Ein Dienstendpunkt kann Teil eines kontinuierlich verfügbaren Dienstes sein, der von IIS gehostet wird, oder er kann ein Dienst sein, der in einer Anwendung gehostet wird. Die Nachrichten können so einfach wie ein einzelnes Zeichen oder Wort sein, das als XML gesendet wird, oder so komplex wie ein Strom binärer Daten.

Erste Schritte

Der Dienst beschreibt die Vorgänge, die er in einem Dienstvertrag ausführt, den er öffentlich als Metadaten verfügbar macht.

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

Die Dienstimplementierung berechnet das entsprechende Ergebnis und gibt es zurück, wie im folgenden Beispielcode gezeigt.

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

Der Dienst stellt einen Endpunkt für die Kommunikation mit dem Dienst bereit, der mithilfe einer Konfigurationsdatei (Web.config) definiert wird, wie in der folgenden Beispielkonfiguration gezeigt.

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

Das Framework macht standardmäßig keine Metadaten verfügbar. Daher aktiviert der Dienst das ServiceMetadataBehavior und macht einen MEX-Endpunkt (Metadata Exchange) unter http: //localhost/servicemodelsamples/service.svc/mex verfügbar . Die folgende Konfiguration zeigt dies.

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

Der Client kommuniziert mit einem bestimmten Vertragstyp mithilfe einer Clientklasse, die vom ServiceModel Metadata Utility Tool (Svcutil.exe) generiert wird.

Führen Sie an der SDK-Eingabeaufforderung im Clientverzeichnis den folgenden Befehl aus, um den typisierten Proxy zu generieren:

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

Wie der Dienst verwendet der Client eine Konfigurationsdatei (App.config), um den Endpunkt anzugeben, mit dem er kommunizieren möchte. Die Clientendpunktkonfiguration besteht aus einer absoluten Adresse für den Serviceendpunkt, der Bindung und dem Vertrag, wie im folgenden Beispiel gezeigt.

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

Die Clientimplementierung instantiiert den Client und verwendet die typisierte Schnittstelle, um mit der Kommunikation mit dem Dienst zu beginnen, wie im folgenden Beispielcode gezeigt.

// 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow