Delen via


Niet-uitgepakte berichten

In het Uitgepakte voorbeeld worden berichten zonder verpakking 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 wikkelt de n1- en n2-parameters niet in een omhullend element; ze zijn directe kinderen van het SOAP-body-element.

Opmerking

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

In dit voorbeeld wordt een uitgepakt bericht gecreëerd door MessageContractAttribute toe te passen op het parametertype en het retourwaardetype van de servicebewerking, zoals te zien is 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;
    //…
}

Om u in staat te stellen de verzonden en ontvangen berichten te zien, maakt dit voorbeeld gebruik van tracering. Bovendien is de WSHttpBinding zonder beveiliging geconfigureerd, om het aantal logberichten te verminderen.

Het resulterende traceringslogboek (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

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

  2. Maak een map C:\LOGS voor het vastleggen van berichten. Geef de gebruikersnetwerkservice schrijfmachtigingen voor deze map.

  3. 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.

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