Delen via


Route via lichaam

Het RouteByBody-voorbeeld laat zien hoe u een service implementeert die berichtobjecten accepteert met een SOAP-actie. Dit voorbeeld is gebaseerd op de Aan de slag die een rekenmachineservice implementeert. De service implementeert één Calculate bewerking die een Message aanvraagparameter accepteert en een Message antwoord retourneert.

In dit voorbeeld is de client een consoletoepassing (.exe) en wordt de service gehost in IIS.

Opmerking

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

In het voorbeeld ziet u dat berichten worden verzonden op basis van de hoofdtekstinhoud. Het ingebouwde WCF-mechanisme (Windows Communication Foundation) voor berichtverzending is gebaseerd op berichtacties. Er zijn echter veel bestaande webservices die al hun bewerkingen definiëren met Action=". Het is onmogelijk om een service te bouwen op basis van WSDL waarmee aanvraagberichten worden verzonden op basis van actiegegevens. In dit voorbeeld ziet u een servicecontract dat is gebaseerd op WSDL (de WSDL is opgenomen in Service.wsdl die is opgenomen in het voorbeeld). Het servicecontract is Calculator, vergelijkbaar met de rekenmachine die wordt gebruikt in Aan de slag. Echter, [OperationContract] specificeert Action="" voor alle bewerkingen.

[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);
    }

Bij een contract vereist een service aangepast verzendgedrag DispatchByBodyBehavior om toe te staan dat berichten tussen bewerkingen worden verzonden. Met dit verzendgedrag wordt de DispatchByBodyElementOperationSelector aangepaste bewerkingskiezer geïnitialiseerd met een tabel met de bewerkingsnamen die zijn opgegeven door QName van respectieve wrapper-elementen. DispatchByBodyElementOperationSelector kijkt naar de start-tag van het eerste kind van het hoofddeel en selecteert de bewerking met behulp van de eerder genoemde tabel.

De client maakt gebruik van een proxy die automatisch is gegenereerd op basis van de WSDL die door de service is geëxporteerd met het hulpprogramma ServiceModel Metadata Utility (Svcutil.exe).

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

Het feit dat acties van alle bewerkingen leeg zijn, heeft geen invloed op de clientcode, met uitzondering van de actieparameters in de automatisch gegenereerde proxy.

De clientcode voert verschillende berekeningen uit. 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

  1. Zorg ervoor dat u de One-Time Setup Procedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Volg de instructies in Het bouwen van de Windows Communication Foundation-voorbeelden om de oplossing te bouwen.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Windows Communication Foundation-voorbeelden uitvoeren.