Bagikan melalui


IEndpointBehavior.ApplyDispatchBehavior Metode

Definisi

Menerapkan modifikasi atau ekstensi layanan di seluruh titik akhir.

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)

Parameter

endpoint
ServiceEndpoint

Titik akhir yang mengekspos kontrak.

endpointDispatcher
EndpointDispatcher

Dispatcher titik akhir yang akan dimodifikasi atau diperluas.

Contoh

Contoh kode berikut menunjukkan implementasi perilaku titik akhir yang menambahkan System.ServiceModel.Dispatcher.IDispatchMessageInspector objek dalam aplikasi layanan. Dalam hal ini, EndpointBehaviorMessageInspector kelas mengimplementasikan System.ServiceModel.Dispatcher.IDispatchMessageInspector untuk memeriksa pesan masuk dan keluar, IEndpointBehavior antarmuka untuk memasukkan kelas inspektur ke dalam sistem inspeksi untuk semua titik akhir yang perilakunya berlaku, dan System.ServiceModel.Configuration.BehaviorExtensionElement untuk mengaktifkan perilaku pemeriksa pesan menggunakan file konfigurasi aplikasi.

Langkah pertama adalah mengimplementasikan pemeriksa pesan.

// IDispatchMessageInspector Members

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
  Console.WriteLine("AfterReceiveRequest called.");
  return null;
}

public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("BeforeSendReply called.");
}

Contoh kode berikutnya menunjukkan penggunaan ApplyDispatchBehavior metode untuk menambahkan pemeriksa pesan ke DispatchRuntime.MessageInspectors properti .

// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
  return;
}

public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
  behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void Validate(ServiceEndpoint serviceEndpoint)
{
  return;
}

Contoh kode berikut menunjukkan implementasi System.ServiceModel.Configuration.BehaviorExtensionElement untuk mengaktifkan penggunaan perilaku pemeriksa pesan dari file konfigurasi.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

Terakhir, file konfigurasi berikut menunjukkan bagaimana contoh sebelumnya dapat digunakan dari konfigurasi.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ServiceMetadata" />
          </baseAddresses>
        </host>
        <endpoint
          address="/SampleService"
          binding="wsHttpBinding"
          behaviorConfiguration="withMessageInspector" 
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="withMessageInspector">
          <endpointMessageInspector />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <add 
          name="endpointMessageInspector"
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

Keterangan

Terapkan ApplyDispatchBehavior metode untuk melihat, memodifikasi, atau memperluas runtime layanan di semua pesan atau untuk operasi tertentu di titik akhir. Untuk detail tentang kustomisasi apa yang dapat Anda lakukan dalam aplikasi layanan, lihat System.ServiceModel.Dispatcher.DispatchRuntime dan System.ServiceModel.Dispatcher.DispatchOperation.

Disarankan agar ApplyDispatchBehavior metode melemparkan NotImplementedException pengecualian jika perilaku hanya dimaksudkan untuk digunakan dalam aplikasi klien.

Perhatikan bahwa mungkin ada dua operasi dengan nama yang sama dalam deskripsi saat menggunakan kontrak panggilan balik (satu operasi di setiap arah). Jika Anda melakukan iterasi melalui operasi, Anda harus menghubungkan arah pesan antara titik System.ServiceModel.Dispatcher.DispatchRuntime akhir dan apa yang dikembalikan oleh DispatchRuntime.CallbackClientRuntime properti .

Selain itu, karena perilaku lain mungkin telah menambahkan atau menghapus beberapa operasi dari runtime, tidak ada jaminan bahwa ada jumlah operasi yang sama dalam deskripsi karena ada System.ServiceModel.Dispatcher.DispatchOperation objek dalam DispatchRuntime.Operations properti.

Berlaku untuk