Bagikan melalui


Header Alamat

Sampel Header Alamat menunjukkan bagaimana klien dapat meneruskan parameter referensi ke layanan menggunakan Windows Communication Foundation (WCF).

Catatan

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

Spesifikasi WS-Addressing menentukan gagasan referensi titik akhir sebagai cara untuk mengatasi titik akhir layanan Web tertentu. Di WCF, referensi titik akhir dimodelkan menggunakan kelas EndpointAddress - EndpointAddress adalah jenis bidang Alamat kelas ServiceEndpoint.

Bagian model referensi titik akhir adalah setiap referensi dapat membawa beberapa parameter referensi yang menambahkan informasi pengidentifikasi tambahan. Dalam WCF, parameter referensi ini dimodelkan sebagai instans kelas AddressHeader.

Dalam sampel ini, klien menambahkan parameter referensi ke EndpointAddress titik akhir klien. Layanan mencari parameter referensi ini dan menggunakan nilainya dalam logika operasi layanan "Hello".

Klien

Agar mengirim parameter referensi, klien harus menambahkan AddressHeader ke EndpointAddress dari ServiceEndpoint. Karena kelas EndpointAddress tidak dapat diubah, modifikasi alamat titik akhir harus dilakukan menggunakan kelas EndpointAddressBuilder. Kode berikut menginisialisasi klien untuk mengirim parameter referensi sebagai bagian dari pesannya.

HelloClient client = new HelloClient();
EndpointAddressBuilder builder =
    new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header =
    AddressHeader.CreateAddressHeader(IDName, IDNamespace, "John");
builder.Headers.Add(header);
client.Endpoint.Address = builder.ToEndpointAddress();

Kode membuat EndpointAddressBuilder menggunakan EndpointAddress asli sebagai nilai awal. Kemudian, ini menambahkan header alamat yang baru dibuat; panggilan ke CreateAddressHeader membuat header dengan nama, namespace layanan, dan nilai tertentu. Di sini nilainya adalah "John". Setelah header ditambahkan ke penyusun, metode ToEndpointAddress() mengonversi penyusun (dapat diubah) kembali menjadi alamat titik akhir (tidak dapat diubah), yang ditetapkan kembali ke bidang Alamat titik akhir klien.

Sekarang saat klien memanggil Console.WriteLine(client.Hello());, layanan bisa mendapatkan nilai parameter alamat ini, seperti yang terlihat dalam output yang dihasilkan dari klien.

Hello, John

Server

Implementasi operasi layanan Hello() menggunakan OperationContext saat ini untuk memeriksa nilai header pada pesan masuk.

string id = null;
// look at headers on incoming message
for (int i = 0;
     i < OperationContext.Current.IncomingMessageHeaders.Count;
     ++i)
{
    MessageHeaderInfo h = OperationContext.Current.IncomingMessageHeaders[i];
    // for any reference parameters with the correct name & namespace
    if (h.IsReferenceParameter &&
        h.Name == IDName &&
        h.Namespace == IDNamespace)
    {
        // read the value of that header
        XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
        id = xr.ReadElementContentAsString();
    }
}
return "Hello, " + id;

Kode berulang di semua header pada pesan masuk, yang mencari header yang merupakan parameter referensi dengan nama tertentu dan. Jika parameter ditemukan, parameter membaca nilai parameter dan menyimpannya dalam variabel "id".

Untuk menyiapkan, membangun, dan menjalankan sampel

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

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

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