Freigeben über


Interoperabilität mit ASMX-Webdiensten

Das ASMX-Beispiel veranschaulicht, wie eine Windows Communication Foundation (WCF)-Clientanwendung in einen vorhandenen ASMX-Webdienst integriert wird.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Dieses Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer Dienstbibliothek (.dll), die von Internetinformationsdienste (IIS) gehostet wird. Der Dienst ist ein ASMX-Webdienst, der einen Vertrag implementiert, der ein Kommunikationsmuster für die Anforderungsantwort definiert. Der Dienst macht mathematische Vorgänge (Add, Subtract, und MultiplyDivide) verfügbar. Der Client sendet synchrone Anforderungen an eine Mathematikoperation, und der Dienst antwortet mit dem Ergebnis. Clientaktivitäten sind im Konsolenfenster sichtbar.

Die im folgenden Beispielcode gezeigte ASMX-Webdienstimplementierung berechnet und gibt das entsprechende Ergebnis zurück.

[WebService(Namespace="http://Microsoft.ServiceModel.Samples")]
public class CalculatorService : System.Web.Services.WebService
    {
        [WebMethod]
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        [WebMethod]
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        [WebMethod]
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        [WebMethod]
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    }

Wie in der Konfiguration angegeben, kann auf den Dienst unter http://localhost/servicemodelsamples/service.asmx von einem Client auf demselben Computer zugegriffen werden. Für Clients auf Remotecomputern für den Zugriff auf den Dienst muss ein qualifizierter Domänenname anstelle von localhost angegeben werden.

Die Kommunikation erfolgt über einen Client, der vom ServiceModel Metadata Utility Tool (Svcutil.exe) generiert wird. Der Client ist in der Datei generatedClient.cs enthalten. Der ASMX-Dienst muss verfügbar sein, um den Proxycode zu generieren, da er zum Abrufen der aktualisierten Metadaten verwendet wird. Führen Sie den folgenden Befehl aus einer Eingabeaufforderung im Clientverzeichnis aus, um den eingegebenen Proxy zu generieren.

svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedClient.cs

Mithilfe des generierten Clients können Sie auf einen Dienstendpunkt zugreifen, indem Sie die entsprechende Adresse und Bindung konfigurieren. Wie der Dienst verwendet der Client eine Konfigurationsdatei (App.config), um den Endpunkt für die Kommunikation anzugeben. Die Clientendpunktkonfiguration besteht aus einer absoluten Adresse für den Dienstendpunkt, die Bindung und den Vertrag, wie in der folgenden Beispielkonfiguration gezeigt.

<client>
   <endpoint
      address="http://localhost/ServiceModelSamples/service.asmx"
      binding="basicHttpBinding"
      contract="Microsoft.ServiceModel.Samples.CalculatorServiceSoap" />
</client>

Die Clientimplementierung erstellt eine Instanz des generierten Clients. Der generierte Client kann dann für die Kommunikation mit dem Dienst verwendet werden.

// Create a client.
CalculatorServiceSoapClient client = new CalculatorServiceSoapClient();

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

//Closing the client gracefully closes the connection and cleans up resources.
client.Close();

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

Wenn Sie das Beispiel ausführen, werden die Vorgangsanforderungen und -antworten im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

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

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.