ASMX-client met een WCF-service
Het ASMX-voorbeeld laat zien hoe u een service maakt met behulp van WINDOWS Communication Foundation (WCF) en vervolgens toegang krijgt tot de service vanuit een niet-WCF-client, zoals een ASMX-client.
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 implementeert een contract dat een communicatiepatroon aanvraagantwoord definieert. Het contract wordt gedefinieerd door de ICalculator
interface, waarmee wiskundige bewerkingen (Add
, Subtract
, Multiply
en ) worden Divide
weergegeven. De ASMX-client maakt synchrone aanvragen voor een wiskundige bewerking en de service reageert met het resultaat.
De service implementeert een ICalculator
contract zoals gedefinieerd in de volgende 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);
}
De DataContractSerializer CLR-typen worden XmlSerializer toegewezen aan een XML-weergave. Hiermee DataContractSerializer worden sommige XML-weergaven anders geïnterpreteerd dan XmlSerializer. Niet-WCF-proxygeneratoren, zoals Wsdl.exe, genereren een meer bruikbare interface wanneer de XmlSerializer wordt gebruikt. De XmlSerializerFormatAttribute wordt toegepast op de interface om ervoor te zorgen dat de XmlSerializer wordt gebruikt voor het ICalculator
toewijzen van CLR-typen aan XML. De service-implementatie berekent en retourneert het juiste resultaat.
De service maakt één eindpunt beschikbaar voor communicatie met de service, gedefinieerd met behulp van een configuratiebestand (Web.config). Het eindpunt bestaat uit een adres, een binding en een contract. De service maakt het eindpunt beschikbaar op het basisadres dat wordt geleverd door de IIS-host (Internet Information Services). Het binding
kenmerk is ingesteld op basicHttpBinding dat HTTP-communicatie biedt met SOAP 1.1, die compatibel is met WS-I BasicProfile 1.1, zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
<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>
De ASMX-client communiceert met de WCF-service met behulp van een getypeerde proxy die wordt gegenereerd door het WSDL-hulpprogramma (Web Services Description Language) (Wsdl.exe). De getypte proxy bevindt zich in het bestand generatedClient.cs. Het WSDL-hulpprogramma haalt metagegevens op voor de opgegeven service en genereert een getypeerde proxy voor gebruik door een client om te communiceren. Standaard worden in het framework geen metagegevens weergegeven. Als u de metagegevens wilt weergeven die vereist zijn voor het genereren van de proxy, moet u een <serviceMetadata> toevoegen en het httpGetEnabled
kenmerk True
instellen op zoals wordt weergegeven in de volgende configuratie.
<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>
Voer de volgende opdracht uit vanaf een opdrachtprompt in de clientmap om de getypte proxy te genereren.
wsdl /n:Microsoft.ServiceModel.Samples /o:generatedClient.cs /urlkey:CalculatorServiceAddress http://localhost/servicemodelsamples/service.svc?wsdl
Door de gegenereerde getypeerde proxy te gebruiken, heeft de client toegang tot een bepaald service-eindpunt door het juiste adres te configureren. De client gebruikt een configuratiebestand (App.config) om het eindpunt op te geven waarmee moet worden gecommuniceerd.
<appSettings>
<add key="CalculatorServiceAddress"
value="http://localhost/ServiceModelSamples/service.svc"/>
</appSettings>
De client-implementatie bouwt een exemplaar van de getypte proxy om te beginnen met de communicatie met de 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();
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.
Notitie
Zie voor meer informatie over het doorgeven en retourneren van complexe gegevenstypen: Gegevensbinding in een Windows Forms-client, gegevensbinding in een Windows Presentation Foundation-client en gegevensbinding in een ASP.NET Client.