Penggunaan Titik Akhir Standar
Sampel StandardEndpoints menunjukkan cara menggunakan titik akhir standar dalam file konfigurasi layanan. Titik akhir standar memungkinkan pengguna untuk menyederhturunanan definisi titik akhir dengan menggunakan satu properti untuk menjelaskan kombinasi alamat, pengikatan, dan kontrak dengan properti tambahan yang terkait dengannya. Sampel ini menunjukkan cara menentukan dan mengimplementasikan titik akhir standar kustom dan cara menentukan properti tertentu di titik akhir.
Detail Sampel
Titik akhir layanan dapat ditentukan dengan menyediakan tiga parameter: alamat, pengikatan, dan kontrak. Parameter lain yang dapat disediakan termasuk konfigurasi perilaku, header, URI mendengarkan, dan sebagainya. Dalam beberapa kasus, salah satu atau semua alamat, pengikatan, dan kontrak memiliki nilai yang tidak dapat berubah. Untuk alasan ini, dimungkinkan untuk menggunakan titik akhir standar. Beberapa contoh titik akhir tersebut termasuk titik akhir pertukaran metadata dan titik akhir penemuan. Titik akhir standar juga meningkatkan kegunaan dengan memungkinkan konfigurasi titik akhir layanan tanpa harus memberikan informasi bersifat tetap atau untuk membuat titik akhir standarnya sendiri, misalnya untuk meningkatkan kegunaan dengan menyediakan serangkaian nilai default yang wajar dan dengan demikian mengurangi verbositas file konfigurasi.
Sampel ini terdiri dari dua proyek: layanan yang menentukan dua titik akhir standar dan klien yang berkomunikasi dengan layanan. Cara titik akhir standar didefinisikan untuk layanan dalam file konfigurasi ditampilkan dalam contoh berikut.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<extensions>
<endpointExtensions>
<add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
</endpointExtensions>
</extensions>
<services>
<service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
<endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
<endpoint kind="mexEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<customEndpoint>
<standardEndpoint property="True" />
</customEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Titik akhir pertama yang didefinisikan untuk layanan adalah jenis customEndpoint
, yang definisinya dapat dilihat di bagian <standardEndpoints>
, tempat properti property
diberi nilai true
. Jenis ini adalah kasus titik akhir yang disesuaikan dengan properti baru. Titik akhir kedua sesuai dengan titik akhir metadata, di mana nilai untuk alamat, pengikatan, dan kontrak diperbaiki.
Untuk menentukan elemen titik akhir standar, kelas yang berasal dari StandardEndpointElement
harus dibuat. Dalam kasus sampel ini, kelas CustomEndpointElement
telah didefinisikan seperti yang ditunjukkan dalam contoh berikut.
public class CustomEndpointElement : StandardEndpointElement
{
public bool Property
{
get { return (bool)base["property"]; }
set { base["property"] = value; }
}
protected override ConfigurationPropertyCollection Properties
{
get
{
ConfigurationPropertyCollection properties = base.Properties;
properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
return properties;
}
}
protected override Type EndpointType
{
get { return typeof(CustomEndpoint); }
}
protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
{
return new CustomEndpoint();
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
{
}
protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
{
}
}
Dalam fungsi CreateServiceEndpoint
, objek CustomEndpoint
dibuat. Definisinya ditunjukkan dalam contoh berikut:
public class CustomEndpoint : ServiceEndpoint
{
public CustomEndpoint()
: this(string.Empty)
{
}
public CustomEndpoint(string address)
: this(address, ContractDescription.GetContract(typeof(ICalculator)))
{
}
public CustomEndpoint(string address, ContractDescription contract)
: base(contract)
{
this.Binding = new BasicHttpBinding();
this.IsSystemEndpoint = false;
}
public bool Property
{
get;
set;
}
}
Untuk melakukan komunikasi antara layanan dan klien, referensi layanan dibuat di klien ke layanan. Ketika sampel dibangun dan dijalankan, layanan dijalankan dan klien berkomunikasi dengannya. Perhatikan bahwa referensi layanan harus diperbarui setiap kali ada beberapa perubahan dalam layanan.
Untuk menggunakan sampel ini
Dengan menggunakan Visual Studio, buka file StandardEndpoints.sln.
Aktifkan beberapa proyek untuk memulai.
Di Penjelajah Solusi, pilih dan tahan (atau klik kanan) proyek, lalu pilih Properti.
Di Properti Umum pilih Proyek Startup dan kemudian Beberapa proyek Sartup.
Pindahkan proyek Layanan ke awal daftar, dengan Tindakan diatur ke Mulai.
Pindahkan proyek Klien setelah proyek Layanan, juga dengan Tindakan diatur ke Mulai.
Perilaku ini menentukan bahwa proyek Klien dijalankan setelah proyek Layanan.
Untuk menjalankan solusi, tekan F5.
Catatan
Jika langkah-langkah ini tidak berhasil, pastikan lingkungan Anda telah disiapkan dengan benar, menggunakan langkah-langkah berikut:
- Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.
- Untuk membangun solusi, ikuti instruksi dalam Membangun Sampel Windows Communication Foundation.
- Untuk menjalankan sampel dalam satu atau beberapa konfigurasi komputer, ikuti instruksi dalam Menjalankan Sampel WCF.