Sdílet prostřednictvím


Nerozbalené zprávy

Ukázka Bez přepsání 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 zabalí n1 parametry.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>

Nepřepsaná zpráva nezabalí n1 parametry n2 do prvku obsahujícího, jsou přímými podřízenými prvky elementu soap.

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ří nepřepsaná zpráva použitím MessageContractAttribute typu parametru operace služby a návratového typu hodnoty, jak je znázorně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.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  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 edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  4. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.