Samenwerken met ASMX-webservices
Het ASMX-voorbeeld laat zien hoe u een WCF-clienttoepassing (Windows Communication Foundation) integreert met een bestaande ASMX-webservice.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
Dit voorbeeld bestaat uit een clientconsoleprogramma (.exe) en een servicebibliotheek (.dll) die wordt gehost door IIS (Internet Information Services). De service is een ASMX-webservice waarmee een contract wordt geïmplementeerd waarmee een communicatiepatroon tussen aanvragen en antwoorden wordt gedefinieerd. De service maakt wiskundige bewerkingen beschikbaar (Add
, Subtract
, Multiply
en Divide
). De client doet synchrone aanvragen naar een wiskundige bewerking en de service reageert met het resultaat. Clientactiviteit is zichtbaar in het consolevenster.
De implementatie van de ASMX-webservice die in de volgende voorbeeldcode wordt weergegeven, berekent en retourneert het juiste resultaat.
[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;
}
}
Zoals geconfigureerd, kan de service worden geopend http://localhost/servicemodelsamples/service.asmx
door een client op dezelfde computer. Voor clients op externe computers om toegang te krijgen tot de service, moet een gekwalificeerde domeinnaam worden opgegeven in plaats van localhost.
Communicatie wordt uitgevoerd via een client die wordt gegenereerd door het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe). De client bevindt zich in het bestand generatedClient.cs. De ASMX-service moet beschikbaar zijn om de proxycode te genereren, omdat deze wordt gebruikt om de bijgewerkte metagegevens op te halen. Voer de volgende opdracht uit vanaf een opdrachtprompt in de clientmap om de getypte proxy te genereren.
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedClient.cs
Met behulp van de gegenereerde client hebt u toegang tot een service-eindpunt door het juiste adres en de juiste binding te configureren. Net als de service gebruikt de client een configuratiebestand (App.config) om het eindpunt op te geven waarmee moet worden gecommuniceerd. De configuratie van het clienteindpunt bestaat uit een absoluut adres voor het service-eindpunt, de binding en het contract, zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
<client>
<endpoint
address="http://localhost/ServiceModelSamples/service.asmx"
binding="basicHttpBinding"
contract="Microsoft.ServiceModel.Samples.CalculatorServiceSoap" />
</client>
De client-implementatie bouwt een exemplaar van de gegenereerde client. De gegenereerde client kan vervolgens worden gebruikt om te communiceren met de service.
// 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();
Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.
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.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.