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" 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 bir 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şmede uzantılar değiştirmek, incelemek veya eklemek için yöntemini kullanın.

  • Hizmet uygulamasındaki ApplyDispatchBehavior bir sözleşmede uzantılar 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 nesneleri 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.

Not

IContractBehavior Tüm yöntemler ve System.ServiceModel.Description.ServiceEndpoint değerlerini parametre olarak 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, nesnede Behaviors yöntemi çağrıldığında ICommunicationObject.Open oluşan hizmet çalışma zamanının oluşturulmasından önce özelliğine System.ServiceModel.ServiceHost eklenmesi gerekir. Bunu yapmanın iki yolu vardır.

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

Not

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

İkinci yöntem, bunu uygulayan ve aşağıdakilere IContractBehavior 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.

İkinci yaklaşımın davranışı, özel öznitelik de uygularsa System.ServiceModel.Description.IContractBehaviorAttributebiraz değişir. Bu durumda davranış aşağıdaki gibidir:

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

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

Yöntemler

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)

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

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

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