Dela via


Meddelanden som inte har packats upp

Exemplet Unwrapped visar oöppnade meddelanden. Som standard formateras meddelandetexten så att parametrarna för en tjänståtgärd omsluts. Följande exempel visar ett Add meddelande om begäran till tjänsten ICalculator i omslutet läge.

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

Elementet <Add> i meddelandetexten omsluter parametrarna n1 och n2 . I följande exempel visas däremot motsvarande meddelande i det oöppnade läget.

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

Det oöppnade meddelandet omsluter inte parametrarna n1 och n2 i ett innehållande element, de är direkta underordnade till soap-brödtextelementet.

Kommentar

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

I det här exemplet skapas ett oskrivet meddelande genom att använda MessageContractAttribute parametertypen för tjänståtgärden och returnera värdetypen enligt följande exempelkod.

[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;
    //…
}

För att du ska kunna se de meddelanden som skickas och tas emot använder det här exemplet spårning. Dessutom WSHttpBinding har konfigurerats utan säkerhet för att minska antalet meddelanden som loggas.

Den resulterande spårningsloggen (c:\logs\Message.log) kan visas med hjälp av verktyget Tjänstspårningsvisare (SvcTraceViewer.exe). Om du vill visa meddelandeinnehållet väljer du Meddelanden i både det vänstra och det högra fönstret i verktyget Tjänstspårningsvisning. Spårningsloggar i det här exemplet har konfigurerats för att genereras till mappen C:\LOGS. Skapa den här mappen innan du kör exemplet och ge användaren nätverkstjänst skrivbehörighet för den här katalogen.

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

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Skapa en C:\LOGS-katalog för loggning av meddelanden. Ge användarens nätverkstjänst skrivbehörigheter för den här katalogen.

  3. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

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