Route per hoofdtekst
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.
Notitie
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. [OperationContract]
De opgegeven 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 starttag van het eerste onderliggende element van de hoofdtekst 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 wordt geëxporteerd met behulp van het Hulpprogramma voor metagegevens van ServiceModel (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
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Volg de instructies in Het bouwen van de Windows Communication Foundation-voorbeelden om de oplossing te bouwen.
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.