IContractBehavior 인터페이스

정의

서비스 또는 클라이언트 애플리케이션에서 계약에 대한 런타임 동작을 확장하는 데 사용할 수 있는 메서드를 구현합니다.

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
파생

예제

다음 코드 예제에서는 사용자 지정 IInstanceProvider 구현이 항상 동일한 서비스 인스턴스를 반환하고 이 인스턴스를 재사용하지 않는 "단일" 동작을 제공하는 ObjectProviderBehavior를 호출했다고 가정합니다.

인스턴스 공급자 사용자 지정을 삽입하기 위해 이 예제에서는 SingletonBehaviorAttribute를 구현하여 사용자 지정 서비스 인스턴스 공급자를 삽입하는 사용자 지정 특성(IContractBehavior)을 구현하는 방법을 보여 줍니다. 또한 계약에 사용을 바인딩하는 구현 IContractBehaviorAttributeISampleService 구현합니다.

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

설명

애플리케이션 수준에서 계약 차원 실행의 일부 측면을 수정, 검사 또는 확장하기 위한 IContractBehavior 인터페이스를 구현합니다. IServiceBehaviorIEndpointBehavior 개체와 달리 IContractBehavior 개체는 애플리케이션 구성 파일을 사용하여 런타임에 추가할 수 없으며 속성을 사용하거나 프로그래밍 방식으로만 추가할 수 있습니다.

서비스, 엔드포인트 및 계약 동작 중에서 선택하는 방법에 대한 자세한 내용은 동작을 사용하여 런타임 구성 및 확장을 참조하세요.

  • 메서드를 AddBindingParameters 사용하여 동작을 지원하기 위해 바인딩 요소에 사용자 지정 데이터를 제공합니다.

  • 클라이언트 애플리케이션에서 계약에 대한 확장을 수정, 검사 또는 삽입하려면 ApplyClientBehavior 메서드를 사용합니다.

  • 서비스 애플리케이션에서 계약에 대한 확장을 수정, 검사 또는 삽입하려면 ApplyDispatchBehavior 메서드를 사용합니다.

  • 이 메서드를 Validate 사용하여 계약이 특정 기능을 지원할 수 있는지 확인합니다.

IContractBehavior 개체는 이러한 메서드 중 하나를 사용할 수 있지만 종종 하나만 중요합니다. 이러한 경우 사용되지 않는 메서드는 값 없이 반환할 수 있습니다.

참고

모든 메서드가 IContractBehavior 매개 변수로 전달 System.ServiceModel.Description.ContractDescription 됩니다 System.ServiceModel.Description.ServiceEndpoint . 이러한 매개 변수는 검사를 위한 것입니다. 개체를 수정하면 실행 동작이 정의되지 않습니다.

IContractBehavior 형식은 서비스 또는 클라이언트 또는 둘 다에서 사용할 수 있습니다. 서비스에서 IContractBehavior 사용자 지정 작업을 수행하려면 개체에서 메서드를 호출할 Behaviors 때 발생하는 서비스 런타임을 생성하기 전에 속성에 개체를 ICommunicationObject.Open System.ServiceModel.ServiceHost 추가해야 합니다. 두 가지 방법으로 이 작업을 수행할 수 있습니다.

첫 번째 방법은 개체에서 메서드가 호출되는 시점 이전에 속성에 System.ServiceModel.ServiceHost 사용자 지정 계약 동작 BehaviorsICommunicationObject.Open 프로그래밍 방식으로 추가하는 것입니다. 이러한 방식으로 적용하면 모든 엔드포인트에서 해당 계약을 통해 흐르는 모든 메시지에 대해 동작이 적용됩니다.

참고

동작은 동일한 형식의 모든 계약에 적용됩니다. 예를 들어 둘 이상의 엔드포인트에 동일한 계약 형식을 프로그래밍 방식으로 추가하는 경우 동작은 동일한 계약 개체를 참조하는 모든 엔드포인트를 수정합니다.

두 번째 방법은 구현하고 적용하는 사용자 지정 특성을 만드는 것입니다.IContractBehavior

  • 계약 인터페이스입니다. 이 경우 동작은 모든 엔드포인트에서 해당 형식의 모든 계약에 적용됩니다.

  • 서비스 클래스입니다. 이 경우 동작은 계약에 관계없이 모든 엔드포인트에 적용됩니다.

  • 콜백 클래스입니다. 이 경우 동작은 이중 클라이언트의 엔드포인트에 적용됩니다.

두 번째 방법의 동작은 사용자 지정 특성도 구현 System.ServiceModel.Description.IContractBehaviorAttribute하는 경우 약간 다릅니다. 이 경우 동작은 다음과 같습니다.

의도 IContractBehavior 한 클라이언트에서 사용자 지정 작업을 수행하려면 호출될 때 ChannelFactory<TChannel>.CreateChannel 발생하는 클라이언트 런타임을 생성하기 전에 속성에 개체를 추가 Behaviors 해야 합니다. 이때 다음과 같은 두 가지 방법을 사용할 수 있습니다.

프로그래밍 방식으로 추가 하는 방법은 IContractBehavior 클라이언트 또는 서비스 애플리케이션에 대 한 형식 참조 구성 하 고 동작을 사용 하 여 런타임 확장합니다.

메서드

AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

계약 동작을 지원하도록 바인딩 요소를 구성합니다.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

계약에 대해 클라이언트의 수정이나 확장을 구현합니다.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

계약에 대해 클라이언트의 수정이나 확장을 구현합니다.

Validate(ContractDescription, ServiceEndpoint)

계약 및 엔드포인트에서 계약 동작을 지원할 수 있는지 확인하려면 구현합니다.

적용 대상