Bagikan melalui


Titik Akhir Standar

Titik akhir ditentukan dengan menentukan alamat, pengikatan, dan kontrak. Parameter lain yang mungkin diatur pada titik akhir termasuk konfigurasi perilaku, header, dan URI mendengarkan. Untuk jenis titik akhir tertentu, nilai-nilai ini tidak berubah. Misalnya, titik akhir pertukaran metadata selalu menggunakan kontrak IMetadataExchange. Titik akhir lainnya, seperti WebHttpEndpoint selalu memerlukan perilaku titik akhir tertentu. Kegunaan titik akhir dapat ditingkatkan dengan memiliki titik akhir dengan nilai default untuk properti titik akhir yang umum digunakan. Titik akhir standar memungkinkan pengembang untuk menentukan titik akhir yang memiliki nilai default atau di mana satu atau beberapa properti titik akhir tidak berubah. Titik akhir ini memungkinkan Anda menggunakan titik akhir tanpa harus menentukan informasi yang bersifat statis. Titik akhir standar dapat digunakan untuk titik akhir infrastruktur dan aplikasi.

Titik Akhir Infrastruktur

Layanan dapat mengekspos titik akhir dengan beberapa properti yang tidak diimplementasikan secara eksplisit oleh penulis layanan. Misalnya, titik akhir pertukaran metadata mengekspos kontrak IMetadataExchange tetapi sebagai penulis layanan Anda tidak menerapkan antarmuka tersebut, itu diimplementasikan oleh WCF. Titik akhir infrastruktur tersebut memiliki nilai default untuk satu atau beberapa properti titik akhir, beberapa di antaranya mungkin tidak dapat diubah. Properti Contract dari titik akhir pertukaran metadata harus IMetadataExchange, sementara properti lain seperti pengikatan dapat disediakan oleh pengembang. Titik akhir infrastruktur diidentifikasi dengan mengatur properti IsSystemEndpoint ke true.

Titik Akhir Aplikasi

Pengembang aplikasi dapat menentukan titik akhir standarnya sendiri yang menentukan nilai default untuk alamat, pengikatan, atau kontrak. Anda menentukan titik akhir standar dengan mengambil kelas dari ServiceEndpoint dan mengatur properti titik akhir yang sesuai. Anda dapat menyediakan nilai default untuk properti yang dapat diubah. Beberapa properti lain akan memiliki nilai statis yang tidak dapat berubah. Contoh berikut menunjukkan cara menerapkan titik akhir standar.

public class CustomEndpoint : ServiceEndpoint
{
    public CustomEndpoint()
        : this(string.Empty)
    { }  

    public CustomEndpoint(string address)
        : this(address, ContractDescription.GetContract(typeof(ICalculator)))
    { }  

    // Create the custom endpoint with a fixed binding
    public CustomEndpoint(string address, ContractDescription contract)
        : base(contract)
    {
        this.Binding = new BasicHttpBinding();
        this.IsSystemEndpoint = false;
    }

    // Definition of the additional property of this endpoint
    public bool Property { get; set; }
}

Untuk menggunakan titik akhir kustom yang ditentukan pengguna dalam file konfigurasi, Anda harus memperoleh kelas dari StandardEndpointElement, memperoleh kelas dari StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration>, dan mendaftarkan titik akhir standar baru di bagian ekstensi di app.config atau machine.config. StandardEndpointElement menyediakan dukungan konfigurasi untuk titik akhir standar, seperti yang ditunjukkan dalam contoh berikut.

public class CustomEndpointElement : StandardEndpointElement
{
    // Definition of the additional property for the standard endpoint element
    public bool Property
    {
        get { return (bool)base["property"]; }
        set { base["property"] = value; }
    }

    // The additional property needs to be added to the properties of the standard endpoint element
    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            ConfigurationPropertyCollection properties = base.Properties;
            properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
            return properties;
        }
    }

    // Return the type of this standard endpoint
    protected override Type EndpointType
    {
        get { return typeof(CustomEndpoint); }
    }

    // Create the custom service endpoint
    protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
    {
        return new CustomEndpoint();
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
    {
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
    {
    }
}

StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> menyediakan jenis dukungan untuk koleksi yang muncul di bawah bagian <standardEndpoints> dalam konfigurasi untuk titik akhir standar. Contoh berikut menunjukkan cara mengimplementasikan kelas ini.

public class CustomEndpointCollectionElement : StandardEndpointCollectionElement<CustomEndpoint, CustomEndpointElement>
{
    // ...
}

Contoh berikut menunjukkan cara mendaftarkan titik akhir standar di bagian ekstensi.

<extensions>  
      <standardEndpointExtensions>  
        <add  
          name="customStandardEndpoint"  
          type="CustomEndpointCollectionElement, Example.dll,  
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=ffffffffffffffff"/>  
      </standardEndpointExtensions>
</extensions>  

Mengonfigurasi Titik Akhir Standar

Titik akhir standar dapat ditambahkan dalam kode atau dalam konfigurasi. Untuk menambahkan titik akhir standar dalam kode cukup buat instans jenis titik akhir standar yang sesuai dan tambahkan ke host layanan seperti yang ditunjukkan dalam contoh berikut:

serviceHost.AddServiceEndpoint(new CustomEndpoint());  

Untuk menambahkan titik akhir standar dalam konfigurasi, tambahkan elemen <endpoint> ke elemen <service> dan pengaturan konfigurasi apa pun yang diperlukan dalam elemen <standardEndpoints>. Contoh berikut menunjukkan cara menambahkan UdpDiscoveryEndpoint, salah satu titik akhir standar yang dikirim dengan .NET Framework 4.6.1.

<services>  
  <service>  
    <endpoint isSystemEndpoint="true" kind="udpDiscoveryEndpoint" />  
  </service>  
</services>  
<standardEndpoints>
  <udpDiscoveryEndpoint>  
     <standardEndpoint multicastAddress="soap.udp://239.255.255.250:3702" />
  </udpDiscoveryEndpoint>
</standardEndpoints>

Jenis titik akhir standar ditentukan menggunakan atribut jenis dalam elemen <endpoint>. Titik akhir dikonfigurasi dalam elemen <standardEndpoints>. Dalam contoh di atas, titik akhir UdpDiscoveryEndpoint ditambahkan dan dikonfigurasi. Elemen <udpDiscoveryEndpoint> berisi <standardEndpoint> yang mengatur properti MulticastAddress dari UdpDiscoveryEndpoint.

Titik Akhir Standar Dikirim dengan .NET Framework

Tabel berikut mencantumkan titik akhir standar yang dikirim dengan .NET Framework 4.6.1.

Mex Endpoint
Titik akhir standar yang digunakan untuk mengekspos metadata layanan.

AnnouncementEndpoint
Titik akhir standar yang digunakan oleh layanan untuk mengirim pesan pengumuman.

DiscoveryEndpoint
Titik akhir standar yang digunakan oleh layanan untuk mengirim pesan penemuan.

UdpDiscoveryEndpoint
Titik akhir standar yang telah dikonfigurasi sebelumnya untuk operasi penemuan melalui pengikatan multicast UDP.

UdpAnnouncementEndpoint
Titik akhir standar yang digunakan oleh layanan untuk mengirim pesan pengumuman melalui pengikatan UDP.

DynamicEndpoint
Titik akhir standar yang menggunakan WS-Discovery untuk menemukan alamat titik akhir secara dinamis pada durasi.

ServiceMetadataEndpoint
Titik akhir standar untuk pertukaran metadata.

WebHttpEndpoint
Titik akhir standar dengan pengikatan WebHttpBinding yang secara otomatis menambahkan perilaku WebHttpBehavior

WebScriptEndpoint
Titik akhir standar dengan pengikatan WebHttpBinding yang secara otomatis menambahkan perilaku WebScriptEnablingBehavior.

WebServiceEndpoint
Titik akhir standar dengan pengikatan WebHttpBinding.

WorkflowControlEndpoint
Titik akhir standar yang memungkinkan Anda memanggil operasi kontrol pada instans alur kerja.

WorkflowHostingEndpoint
Titik akhir standar yang mendukung pembuatan alur kerja dan dimulainya kembali marka buku.