Dela via


Väg efter kropp

RouteByBody-exemplet visar hur du implementerar en tjänst som accepterar meddelandeobjekt med valfri SOAP-åtgärd. Det här exemplet baseras på komma igång som implementerar en kalkylatortjänst. Tjänsten implementerar en enda Calculate åtgärd som accepterar en Message begäransparameter och returnerar ett Message svar.

I det här exemplet är klienten ett konsolprogram (.exe) och tjänsten finns i IIS.

Anmärkning

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Exemplet visar meddelandesändning baserat på brödtextinnehållet. Den inbyggda mekanismen för meddelandesändning i Windows Communication Foundation (WCF) baseras på meddelandeåtgärder. Det finns dock många befintliga webbtjänster som definierar alla sina åtgärder med Action=". Det är omöjligt att skapa en tjänst baserat på WSDL som fortsätter att skicka begärandemeddelanden baserat på åtgärdsinformation. Det här exemplet visar ett tjänstkontrakt som baseras på WSDL (WSDL finns i Service.wsdl som ingår i exemplet). Tjänstkontraktet är Kalkylatorn, ungefär som det som används i Komma igång. Dock specificerar [OperationContract]Action="" för alla åtgärder.

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

Med ett kontrakt kräver en tjänst anpassat sändningsbeteende DispatchByBodyBehavior för att meddelanden ska kunna skickas mellan åtgärder. Det här sändningsbeteendet initierar den DispatchByBodyElementOperationSelector anpassade åtgärdsväljaren med en tabell med de åtgärdsnamn som nyckelats av QName för respektive omslutningselement. DispatchByBodyElementOperationSelector tittar på starttaggen för det första elementet i Body-elementet och väljer funktionen med hjälp av tabellen som tidigare nämnts.

Klienten använder en proxy som genereras automatiskt från WSDL som exporteras av tjänsten med hjälp av ServiceModel Metadata Utility Tool (Svcutil.exe).

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

Det faktum att åtgärderna för alla åtgärder är tomma påverkar inte klientkoden, förutom åtgärdsparametrarna i den automatiskt genererade proxyn.

Klientkoden utför flera beräkningar. När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.

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.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.

  2. Skapa lösningen genom att följa anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.