Bagikan melalui


Pesan Yang Tidak Dibungkus

Sampel Yang tidak dibungkus menunjukkan pesan yang tidak dibungkus. Secara default, isi pesan diformat sehingga parameter ke operasi layanan dibungkus. Contoh berikut menunjukkan pesan permintaan Add ke layanan ICalculator dalam mode dibungkus.

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

Elemen <Add> dalam isi pesan membungkus parameter n1 dan n2. Sebaliknya, sampel berikut menunjukkan pesan yang setara dalam mode yang tidak dibungkus.

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

Pesan yang tidak dibungkus tidak membungkus parameter n1 dan n2 dalam elemen yang mengandung, parameter adalah turunan langsung dari elemen isi soap.

Catatan

Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.

Dalam sampel ini, pesan yang tidak dibungkus dibuat dengan menerapkan MessageContractAttribute ke jenis parameter operasi layanan dan mengembalikan jenis nilai seperti yang ditunjukkan dalam kode sampel berikut.

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

Untuk memungkinkan Anda melihat pesan yang dikirim dan diterima, sampel ini menggunakan pelacakan. Selain itu, WSHttpBinding telah dikonfigurasi tanpa keamanan, untuk mengurangi jumlah pesan yang dicatatnya.

Log jejak yang dihasilkan (c:\logs\Message.log) dapat dilihat dengan menggunakan Alat Penampil Jejak Layanan (SvcTraceViewer.exe). Untuk menampilkan konten pesan, pilih Pesan di panel kiri dan kanan alat Penampil Jejak Layanan. Log jejak dalam sampel ini dikonfigurasi untuk dihasilkan ke dalam folder C:\LOGS. Buat folder ini sebelum menjalankan sampel dan beri pengguna izin tulis Layanan Jaringan untuk direktori ini.

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Buat direktori C:\LOGS untuk pengelogan pesan. Berikan izin tulis Layanan Jaringan kepada pengguna untuk direktori ini.

  3. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  4. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.