Bagikan melalui


Beberapa Titik Akhir di Satu ListenUri

Sampel MultipleEndpointsSingleUri menunjukkan layanan yang meng-hosting beberapa titik akhir pada satu ListenUri. Sampel ini didasarkan pada Memulai yang mengimplementasikan layanan kalkulator.

Catatan

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

Seperti yang ditunjukkan dalam sampel Beberapa Titik Akhir, layanan dapat meng-hosting beberapa titik akhir, masing-masing dengan alamat yang berbeda dan mungkin juga pengikatan yang berbeda. Sampel ini menunjukkan bahwa dimungkinkan untuk meng-hosting beberapa titik akhir di alamat yang sama. Sampel ini juga menunjukkan perbedaan antara dua jenis alamat yang dimiliki titik akhir layanan: EndpointAddress dan ListenUri.

EndpointAddress adalah alamat logis layanan. Ini adalah alamat tempat pesan SOAP ditujukan. ListenUri adalah alamat fisik layanan. Layanan ini memiliki informasi port dan alamat di mana titik akhir layanan benar-benar mendengarkan pesan pada komputer saat ini. Dalam kebanyakan kasus, tidak perlu alamat ini berbeda; ketika ListenUri tidak ditentukan secara eksplisit, layanan default ke URI dari EndpointAddress titik akhir. Dalam beberapa kasus, berguna untuk membedakannya, seperti saat mengonfigurasi router, yang mungkin menerima pesan yang ditujukan ke sejumlah layanan yang berbeda.

Layanan

Layanan dalam sampel ini memiliki dua kontrak, ICalculator dan IEcho. Selain titik akhir IMetadataExchange kustom, ada tiga titik akhir aplikasi, seperti yang ditunjukkan dalam kode berikut.

<endpoint address="urn:Stuff"
        binding="wsHttpBinding"
        contract="Microsoft.ServiceModel.Samples.ICalculator"
        listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:Stuff"
        binding="wsHttpBinding"
        contract="Microsoft.ServiceModel.Samples.IEcho"
        listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:OtherEcho"
        binding="wsHttpBinding"
        contract="Microsoft.ServiceModel.Samples.IEcho"
        listenUri="http://localhost/servicemodelsamples/service.svc" />

Ketiga titik akhir di-hosting pada ListenUri yang sama dan menggunakan binding yang sama - pada titik akhir ListenUri yang sama harus memiliki pengikatan yang sama, karena titik akhir berbagi tumpukan saluran tunggal yang mendengarkan pesan di alamat fisik itu di komputer. address dari setiap titik akhir adalah URN; meskipun biasanya alamat mewakili lokasi fisik, sebenarnya alamat dapat berupa jenis URI apa pun, karena alamat digunakan untuk tujuan pencocokan dan pemfilteran seperti yang ditunjukkan dalam sampel ini.

Karena ketiga titik akhir berbagi ListenUri yang sama, ketika pesan tiba di sana, Windows Communication Foundation (WCF) harus memutuskan titik akhir mana pesan ditujukan. Setiap titik akhir memiliki filter pesan yang terdiri dari dua bagian: filter alamat dan filter kontrak. Filter alamat cocok dengan To dari pesan SOAP dengan alamat titik akhir layanan. Misalnya, hanya To "Urn:OtherEcho" pesan yang ditujukan merupakan kandidat untuk titik akhir ketiga layanan ini. Filter kontrak cocok dengan Tindakan yang terkait dengan operasi kontrak tertentu. Misalnya, pesan dengan tindakan IEcho. Echo cocok dengan filter kontrak dari titik akhir kedua dan ketiga layanan ini, karena kedua titik akhir tersebut meng-hosting kontrak IEcho.

Dengan demikian kombinasi filter alamat dan filter kontrak memungkinkan untuk merutekan setiap pesan yang tiba di layanan ListenUri ini ke titik akhir yang benar. Titik akhir ketiga dibingkai dari dua lainnya karena menerima pesan yang dikirim ke alamat yang berbeda dari titik akhir lainnya. Titik akhir pertama dan kedua berbeda satu sama lain berdasarkan kontraknya (Tindakan pesan masuk).

Klien

Sama seperti titik akhir di server memiliki dua alamat yang berbeda, titik akhir klien juga memiliki dua alamat. Di server dan klien, alamat logis disebut EndpointAddress. Tetapi sedangkan alamat fisik disebut ListenUri di server, pada klien, alamat fisik disebut Via.

Seperti pada server, secara default, kedua alamat ini sama. Untuk menentukan Via pada klien yang berbeda dari alamat titik akhir, ClientViaBehavior digunakan:

Uri via = new Uri("http://localhost/ServiceModelSamples/service.svc");
CalculatorClient calcClient = new CalculatorClient();
calcClient.ChannelFactory.Endpoint.Behaviors.Add(
        new ClientViaBehavior(via));

Seperti biasa, alamat berasal dari file konfigurasi klien, yang dihasilkan oleh Svcutil.exe. Via (yang sesuai dengan layanan ListenUri) tidak muncul dalam metadata layanan dan sehingga informasi ini harus dikomunikasikan ke klien di luar band (sama seperti alamat metadata layanan).

Klien dalam sampel ini mengirim pesan ke masing-masing dari tiga titik akhir aplikasi server, untuk menunjukkan bahwa ia dapat berkomunikasi dengan (dan membedakan) ketiga titik akhir, meskipun semuanya memiliki Via yang sama.

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.

    Catatan

    Untuk lintas komputer, Anda harus mengganti localhost dalam file Client.cs dengan nama komputer layanan.