Rozbalené zprávy

Ukázka Rozbalená ukazuje nezabalené zprávy. Ve výchozím nastavení je text zprávy formátován tak, aby byly parametry operace služby zabaleny. Následující ukázka ukazuje Add zprávu požadavku na ICalculator službu v zabaleném režimu.

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

Element <Add> v textu zprávy obaluje parametry n1 a n2. Naproti tomu následující ukázka ukazuje ekvivalentní zprávu v nezabaleném režimu.

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

Rozbalená zpráva nezabalí parametry n1 a n2 do obalujícího prvku, jsou přímými potomky elementu soap body.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

V této ukázce se vytvoří nezabalená zpráva použitím MessageContractAttribute na typ parametru operace služby a typ návratové hodnoty, jak je ukázáno v následujícím vzorovém kódu.

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

Aby bylo možné zobrazit odesílané a přijaté zprávy, tato ukázka používá trasování. Kromě toho WSHttpBinding byl nakonfigurován bez zabezpečení, aby se snížil počet zpráv, které protokoluje.

Výsledný protokol trasování (c:\logs\Message.log) lze zobrazit pomocí nástroje Sledování trasování služby (SvcTraceViewer.exe). Pokud chcete zobrazit obsah zprávy, vyberte Zprávy v levém i pravém podokně nástroje Prohlížeč trasování služeb. Protokoly trasování v této ukázce jsou nakonfigurované tak, aby se vygenerovaly do složky C:\LOGS. Vytvořte tuto složku před spuštěním ukázky a udělte uživatelské síťové službě oprávnění k zápisu do tohoto adresáře.

Jak nastavit, sestavit a spustit ukázku

  1. Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.

  2. Vytvořte adresář C:\LOGS pro protokolování zpráv. Udělte uživatelské síťové službě oprávnění k zápisu do tohoto adresáře.

  3. Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

  4. Pokud chcete spustit ukázku v konfiguraci pro jeden počítač nebo pro více počítačů, postupujte podle pokynů v Spuštění ukázek Windows Communication Foundation.