Aracılığıyla paylaş


IContractBehavior Arabirim

Tanım

Hizmet veya istemci uygulamasındaki bir sözleşmenin çalışma zamanı davranışını genişletmek için kullanılabilecek yöntemler uygular.

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
Türetilmiş

Örnekler

Aşağıdaki kod örneği, "tekil" bir davranış sağlayan adlı ObjectProviderBehavior özel IInstanceProvider bir uygulama olduğunu varsayar; her zaman aynı hizmet örneğini döndürür ve geri dönüştürmez.

Örnek sağlayıcısı özelleştirmesini eklemek için örnekte, özel hizmet örneği sağlayıcısını eklemek için uygulayan bir özel özniteliğin (SingletonBehaviorAttribute) nasıl uygulandığı IContractBehavior gösterilmektedir. Ayrıca IContractBehaviorAttribute, kullanımını sözleşmeye ISampleService bağlayan uygular.

public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}
Public Class SingletonBehaviorAttribute
    Inherits Attribute
    Implements IContractBehaviorAttribute, IContractBehavior

  #Region "IContractBehaviorAttribute Members"

  Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
    Get
        Return GetType(ISampleService)
    End Get
  End Property

  #End Region

  #Region "IContractBehavior Members"

  Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
    Return
  End Sub

  Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
    Return
  End Sub

  Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
    dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
  End Sub

  Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
    Return
  End Sub

  #End Region
End Class

Açıklamalar

Uygulama düzeyinde sözleşme genelinde yürütmenin IContractBehavior bazı yönlerini değiştirmek, incelemek veya genişletmek için arabirimini uygulayın. ve IEndpointBehavior nesnelerden farklı olarakIServiceBehavior, IContractBehavior nesneler uygulama yapılandırma dosyası kullanılarak çalışma zamanına eklenemez; yalnızca program aracılığıyla veya öznitelik kullanılarak eklenebilir.

Hizmet, uç nokta ve sözleşme davranışları arasında seçim yapma hakkında daha fazla bilgi için bkz. Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.

  • AddBindingParameters Davranışı desteklemek üzere özel verilerle bağlama öğeleri sağlamak için yöntemini kullanın.

  • İstemci uygulamasındaki ApplyClientBehavior bir sözleşmenin uzantılarını değiştirmek, incelemek veya eklemek için yöntemini kullanın.

  • Hizmet uygulamasındaki ApplyDispatchBehavior bir sözleşmenin uzantılarını değiştirmek, incelemek veya eklemek için yöntemini kullanın.

  • Bir sözleşmenin Validate belirli bir özelliği desteklediğinden emin olmak için yöntemini kullanın.

IContractBehavior nesneler bu yöntemlerden herhangi birini kullanabilir, ancak genellikle yalnızca biri önemlidir; bu gibi durumlarda, kullanılmayan yöntemler herhangi bir değer olmadan döndürülebilir.

Uyarı

IContractBehavior Tüm yöntemler ve System.ServiceModel.Description.ServiceEndpoint parametrelerini geçirirSystem.ServiceModel.Description.ContractDescription. Bu parametreler inceleme içindir; nesneleri değiştirirseniz yürütme davranışı tanımlanmamış olur.

IContractBehavior türleri hizmette veya istemcide ya da her ikisinde de kullanılabilir. Hizmette özelleştirme görevi gerçekleştirmek için, IContractBehavior nesnenin hizmet çalışma zamanının oluşturulmasından önce özelliğine Behaviors eklenmesi gerekir. Bu, nesnede System.ServiceModel.ServiceHost yöntem çağrıldığında ICommunicationObject.Open gerçekleşir. Bunu yapmanın iki yolu vardır.

İlk yöntem, yöntemin nesne üzerinde çağrıldığı ICommunicationObject.Open noktadan önce özel sözleşme davranışını Behaviors program aracılığıyla özelliğine System.ServiceModel.ServiceHost eklemektir. Bu şekilde uygulandığında, davranış herhangi bir uç noktada bu sözleşmeden geçen tüm iletiler için uygulanır.

Uyarı

Davranış, aynı türdeki tüm sözleşmelere uygulanır. Örneğin, aynı sözleşme türünü program aracılığıyla birden fazla uç noktaya eklerseniz, davranış aynı sözleşme nesnesine başvuran tüm uç noktaları değiştirir.

İkinci yöntem, bunu uygulayan IContractBehavior ve uygulayan özel bir öznitelik oluşturmaktır:

  • Sözleşme arabirimi. Bu durumda, davranış herhangi bir uç noktada bu türdeki tüm sözleşmelere uygulanır.

  • Hizmet sınıfı. Bu durumda davranış, sözleşmeden bağımsız olarak tüm uç noktalara uygulanır.

  • Geri çağırma sınıfı. Bu durumda, davranış çift yönlü istemcinin uç noktasına uygulanır.

Özel öznitelik de uygularsa System.ServiceModel.Description.IContractBehaviorAttribute, ikinci yaklaşımın davranışı biraz değişir. Bu durumda davranış aşağıdaki gibidir:

Özelleştirme görevini hedeflendiği istemcide gerçekleştirmek için, IContractBehavior nesnenin istemci çalışma zamanının oluşturulmasından önce özelliğine Behaviors eklenmesi gerekir ve bu durum çağrıldığında ChannelFactory<TChannel>.CreateChannel gerçekleşir. Bunu yapmanın iki yolu vardır:

İstemci veya hizmet uygulamasına program aracılığıyla türler ekleme IContractBehavior hakkında daha fazla bilgi için bkz. Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.

Yöntemler

Name Description
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Tüm bağlama öğelerini sözleşme davranışını destekleyecek şekilde yapılandırılır.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Bir sözleşmede istemcinin bir değişikliğini veya uzantısını uygular.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Bir sözleşmede istemcinin bir değişikliğini veya uzantısını uygular.

Validate(ContractDescription, ServiceEndpoint)

Sözleşmenin ve uç noktanın sözleşme davranışını destekleyeebileceğini onaylamak için uygulayın.

Şunlara uygulanır