Bagikan melalui


Header Alamat

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

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Spesifikasi WS-Addressing mendefinisikan 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 dari bidang Alamat pada kelas ServiceEndpoint.

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

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

Klien

Agar klien mengirim parameter referensi, klien harus menambahkan AddressHeader ke EndpointAddress dari ServiceEndpoint. EndpointAddress Karena kelas tidak dapat diubah, modifikasi alamat titik akhir harus dilakukan menggunakan EndpointAddressBuilder kelas . 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 yang asli EndpointAddress sebagai nilai awal. Kemudian, sebuah header alamat yang baru dibuat ditambahkan; panggilan untuk CreateAddressHeader membuat header dengan nama, namespace, dan nilai tertentu. Di sini nilainya adalah "John". Setelah header ditambahkan ke penyusun, metode ToEndpointAddress() mengonversi penyusun (dapat diubah) kembali menjadi alamat akhir (tidak dapat diubah), yang ditetapkan kembali ke bidang Alamat titik akhir klien.

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

Hello, John

pelayan

Implementasi operasi layanan Hello() menggunakan OperationContext saat ini untuk memeriksa nilai header pada pesan yang 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 melakukan iterasi pada semua header dalam pesan masuk, mencari header yang merupakan parameter referensi dengan nama tertentu. Ketika parameter ditemukan, parameter membaca nilai parameter dan menyimpannya dalam variabel "id".

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.