ASMX-Client mit einem WCF-DienstASMX Client with a WCF Service

Dieses Beispiel veranschaulicht, wie zum Erstellen eines Diensts mit Windows Communication Foundation (WCF), und klicken Sie dann auf den Dienst von einem nicht-WCF-Client, wie einem ASMX-Client zugegriffen wird.This sample demonstrates how to create a service using Windows Communication Foundation (WCF) and then access the service from a non-WCF client, such as an ASMX client.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Dieses Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer von IIS (Internet Information Services, Internetinformationsdienste) gehosteten Dienstbibliothek (.dll).This sample consists of a client console program (.exe) and a service library (.dll) hosted by Internet Information Services (IIS). Der Dienst implementiert einen Vertrag, der ein Anforderungs-Antwort-Kommunikationsmuster definiert.The service implements a contract that defines a request-reply communication pattern. Der Vertrag wird durch die ICalculator-Schnittstelle definiert, die mathematische Operationen (Add, Subtract, Multiply und Divide) verfügbar macht.The contract is defined by the ICalculator interface, which exposes math operations (Add, Subtract, Multiply, and Divide). Der ASMX-Client stellt synchrone Anforderungen an eine mathematische Operation, und der Dienst antwortet mit dem Ergebnis.The ASMX client makes synchronous requests to a math operation and the service replies with the result.

Der Dienst implementiert einen ICalculator-Vertrag, wie im folgenden Code definiert.The service implements an ICalculator contract as defined in the following code.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]  
public interface ICalculator  
{  
    [OperationContract]  
    double Add(double n1, double n2);  
    [OperationContract]  
    double Subtract(double n1, double n2);  
    [OperationContract]  
    double Multiply(double n1, double n2);  
    [OperationContract]  
    double Divide(double n1, double n2);  
}  

DataContractSerializer und XmlSerializer ordnen CLR-Typen einer XML-Darstellung zu.The DataContractSerializer and XmlSerializer map CLR types to an XML representation. Der DataContractSerializer übersetzt einige XML-Darstellungen anders als XmlSerializer.The DataContractSerializer interprets some XML representations differently than XmlSerializer. Nicht-WCF-Proxy-Generatoren wie Wsdl.exe, generieren eine Schnittstelle auf, wenn das XmlSerializer-Element verwendet wird.Non-WCF proxy generators, such as Wsdl.exe, generate a more usable interface when the XmlSerializer is being used. Die XmlSerializerFormatAttribute wird angewendet, um die ICalculator -Schnittstelle, um sicherzustellen, dass das XmlSerializer-Element für die Zuordnung von CLR-Typen in XML verwendet wird.The XmlSerializerFormatAttribute is applied to the ICalculator interface, to ensure that the XmlSerializer is used for mapping CLR types to XML. Die Dienstimplementierung berechnet das entsprechende Ergebnis und gibt es zurück.The service implementation calculates and returns the appropriate result.

Der Dienst macht einen einzigen Endpunkt zur Kommunikation mit dem Dienst verfügbar, der mit einer Konfigurationsdatei (Web.conf) definiert wird.The service exposes a single endpoint for communicating with the service, defined using a configuration file (Web.config). Der Endpunkt besteht aus einer Adresse, einer Bindung und einem Vertrag.The endpoint consists of an address, a binding, and a contract. Der Dienst macht den Endpunkt bei der vom IIS-Host bereitgestellten Basisadresse verfügbar.The service exposes the endpoint at the base address provided by the Internet Information Services (IIS) host. Das binding-Attribut wird auf basicHttpBinding festgelegt, was die HTTP-Kommunikation über SOAP 1.1 ermöglicht, das mit WS-I BasicProfile 1.1 kompatibel ist, wie in der folgenden Beispielkonfiguration dargestellt.The binding attribute is set to basicHttpBinding that provides HTTP communications using SOAP 1.1, which is compliant with WS-I BasicProfile 1.1 as shown in the following sample configuration.

<services>  
  <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
           behaviorConfiguration="CalculatorServiceBehavior">  
    <!-- This endpoint is exposed at the base address provided by the host: http://localhost/servicemodelsamples/service.svc.  -->  
    <endpoint address=""  
              binding="basicHttpBinding"   
              contract="Microsoft.ServiceModel.Samples.ICalculator" />  
  </service>  
</services>  

Der ASMX-Client kommuniziert mit dem WCF-Dienst mittels eines typisierten Proxys, das mit dem Web Services Description Language (WSDL)-Hilfsprogramm (Wsdl.exe) generiert wird.The ASMX client communicates with the WCF service using a typed proxy that is generated by the Web Services Description Language (WSDL) utility (Wsdl.exe). Der typisierte Proxy ist in der Datei generatedClient.cs enthalten.The typed proxy is contained in the file generatedClient.cs. Das WSDL-Dienstprogramm ruft Metadaten für den angegebenen Dienst ab und generiert einen typisierten Proxy, den ein Client zur Kommunikation verwenden kann.The WSDL utility retrieves metadata for the specified service and generates a typed proxy for use by a client to communicate. Standardmäßig macht das Framework keine Metadaten verfügbar.By default, the framework does not expose any metadata. Um die Metadaten erforderlich, um den Proxy zu generieren verfügbar zu machen, müssen Sie Hinzufügen einer <ServiceMetadata > und legen Sie seine httpGetEnabled -Attribut auf True wie in folgender Konfiguration gezeigt.To expose the metadata required to generate the proxy, you must add a <serviceMetadata> and set its httpGetEnabled attribute to True as shown in the following configuration.

<behaviors>  
  <serviceBehaviors>  
    <behavior name="CalculatorServiceBehavior">  
      <!-- Setting httpGetEnabled to True on the serviceMetadata  
           behavior exposes the service's wsdl at <base address>?wsdl :  
           http://localhost/servicemodelsamples/service.svc?wsdl -->  
      <serviceMetadata httpGetEnabled="True"/>  
      <serviceDebug includeExceptionDetailInFaults="False" />  
    </behavior>  
  </serviceBehaviors>  
</behaviors>  

Führen Sie den folgenden Befehl an einer Eingabeaufforderung im Clientverzeichnis aus, um den typisierten Proxy zu generieren.Run the following command from a command prompt in the client directory to generate the typed proxy.

wsdl /n:Microsoft.ServiceModel.Samples /o:generatedClient.cs /urlkey:CalculatorServiceAddress http://localhost/servicemodelsamples/service.svc?wsdl  

Unter Verwendung des generierten typisierten Proxys kann der Client auf einen bestimmten Endpunkt zugreifen, indem er die entsprechende Adresse konfiguriert.By using the generated typed proxy, the client can access a given service endpoint by configuring the appropriate address. Der Client gibt den Endpunkt, mit dem er kommunizieren möchte, mithilfe einer Konfigurationsdatei (App.config) an.The client uses a configuration file (App.config) to specify the endpoint to communicate with.

<appSettings>  
  <add key="CalculatorServiceAddress"   
       value="http://localhost/ServiceModelSamples/service.svc"/>  
</appSettings>  

Die Clientimplementierung erstellt eine Instanz des typisierten Proxys, um die Kommunikation mit dem Dienst zu beginnen.The client implementation constructs an instance of the typed proxy to begin communicating with the service.

// Create a client to the CalculatorService.  
using (CalculatorService client = new CalculatorService())  
{  
    // 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);  

    // Call the Subtract service operation.  
    value1 = 145.00D;  
    value2 = 76.54D;  
    result = client.Subtract(value1, value2);  
    Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);  

    // Call the Multiply service operation.  
    value1 = 9.00D;  
    value2 = 81.25D;  
    result = client.Multiply(value1, value2);  
    Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);  

    // Call the Divide service operation.  
    value1 = 22.00D;  
    value2 = 7.00D;  
    result = client.Divide(value1, value2);  
    Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);  

}  

Console.WriteLine();  
Console.WriteLine("Press <ENTER> to terminate client.");  
Console.ReadLine();  

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

Add(100,15.99) = 115.99  
Subtract(145,76.54) = 68.46  
Multiply(9,81.25) = 731.25  
Divide(22,7) = 3.14285714285714  

Press <ENTER> to terminate client.  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Hinweis

Weitere Informationen zu übergeben und komplexe Daten zurückgeben von Datentypen finden Sie unter: Binden von Daten in einem Windows Forms-Client, Binden von Daten in einem Windows Presentation Foundation-Client, und Daten Bindung in einem ASP.NET-ClientFor more information about passing and returning complex data types see: Data Binding in a Windows Forms Client, Data Binding in a Windows Presentation Foundation Client, and Data Binding in an ASP.NET Client

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\Interop\ASMX

Siehe auchSee Also