Niet-uitgepakte berichten
In het voorbeeld Uitgepakte berichten worden uitgepakte berichten gedemonstreerd. Standaard wordt de berichttekst zodanig opgemaakt dat de parameters voor een servicebewerking worden verpakt. In het volgende voorbeeld ziet u een Add
aanvraagbericht naar de ICalculator
service in de verpakte modus.
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
<s:Header>
…
</s:Header>
<s:Body>
<Add xmlns="http://Microsoft.ServiceModel.Samples">
<n1>100</n1>
<n2>15.99</n2>
</Add>
</s:Body>
</s:Envelope>
Het <Add>
element in de berichttekst verpakt de n1
en n2
parameters. In het volgende voorbeeld ziet u daarentegen het equivalente bericht in de uitgepakte modus.
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
<s:Header>
….
</s:Header>
<s:Body>
<n1 xmlns="http://Microsoft.ServiceModel.Samples">100</n1>
<n2 xmlns="http://Microsoft.ServiceModel.Samples">15.99</n2>
</s:Body>
</s:Envelope>
Het niet-uitgepakte bericht verpakt de n1
en n2
parameters in een met element niet, ze zijn directe onderliggende elementen van het soap body-element.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
In dit voorbeeld wordt een uitgepakt bericht gemaakt door het MessageContractAttribute op het parametertype servicebewerking toe te passen en het waardetype te retourneren, zoals wordt weergegeven in de volgende voorbeeldcode.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
ResponseMessage Add(RequestMessage request);
[OperationContract]
ResponseMessage Subtract(RequestMessage request);
[OperationContract]
ResponseMessage Multiply(RequestMessage request);
[OperationContract]
ResponseMessage Divide(RequestMessage request);
}
//setting IsWrapped to false means the n1 and n2
//members will be direct children of the soap body element
[MessageContract(IsWrapped = false)]
public class RequestMessage
{
[MessageBodyMember]
private double n1;
[MessageBodyMember]
private double n2;
//…
}
//setting IsWrapped to false means the result
//member will be a direct child of the soap body element
[MessageContract(IsWrapped = false)]
public class ResponseMessage
{
[MessageBodyMember]
private double result;
//…
}
Als u wilt dat de berichten worden verzonden en ontvangen, gebruikt dit voorbeeld tracering. Bovendien is de WSHttpBinding configuratie zonder beveiliging geconfigureerd, om het aantal berichten te verminderen dat het logboeken bevat.
Het resulterende traceerlogboek (c:\logs\Message.log) kan worden weergegeven met behulp van het hulpprogramma Service Trace Viewer (SvcTraceViewer.exe). Als u de inhoud van berichten wilt weergeven, selecteert u Berichten in zowel de linker- als de rechterdeelvensters van het hulpprogramma Service Trace Viewer. Traceerlogboeken in dit voorbeeld zijn geconfigureerd om te worden gegenereerd in de map C:\LOGS. Maak deze map voordat u het voorbeeld uitvoert en geef de gebruikersnetwerkservice schrijfmachtigingen voor deze map.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Maak een map C:\LOGS voor het vastleggen van berichten. Geef de gebruikersnetwerkservice schrijfmachtigingen voor deze map.
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.