다음을 통해 공유


OperationBehaviorAttribute.ReleaseInstanceMode 속성

정의

작업 호출 과정에서 서비스 개체를 재활용할 시점을 나타내는 값을 가져오거나 설정합니다.

public:
 property System::ServiceModel::ReleaseInstanceMode ReleaseInstanceMode { System::ServiceModel::ReleaseInstanceMode get(); void set(System::ServiceModel::ReleaseInstanceMode value); };
public System.ServiceModel.ReleaseInstanceMode ReleaseInstanceMode { get; set; }
member this.ReleaseInstanceMode : System.ServiceModel.ReleaseInstanceMode with get, set
Public Property ReleaseInstanceMode As ReleaseInstanceMode

속성 값

ReleaseInstanceMode

ReleaseInstanceMode 값 중 하나입니다. 기본값은 None입니다.

예외

값이 ReleaseInstanceMode 값 중 하나가 아닌 경우

예제

다음 예제 코드에서는 호출 전후에 서비스 개체를 재활용하기 위해 ReleaseInstanceMode를 사용하는 방법을 보여 줍니다.

class SampleService : ISampleService
{
  private Guid id;
  private string session;

  public SampleService()
  {
    id = Guid.NewGuid();
    session = OperationContext.Current.SessionId;
    Console.WriteLine("Object {0} has been created.", id);
    Console.WriteLine("For session {0}", session);
  }
  [OperationBehavior(
          ReleaseInstanceMode=ReleaseInstanceMode.BeforeAndAfterCall
  )]
  public string  SampleMethod(string msg)
  {
    Console.WriteLine("The caller said: \"{0}\"", msg);
    Console.WriteLine("For session {0}", OperationContext.Current.SessionId);
    return "The service greets you: " + msg;
  }

  ~SampleService()
  {
    Console.WriteLine("Object {0} has been destroyed.", id);
    Console.WriteLine("For session {0}", session);
  }
}
Friend Class SampleService
    Implements ISampleService
  Private id As Guid
  Private session As String

  Public Sub New()
    id = Guid.NewGuid()
    session = OperationContext.Current.SessionId
    Console.WriteLine("Object {0} has been created.", id)
    Console.WriteLine("For session {0}", session)
  End Sub
  <OperationBehavior(ReleaseInstanceMode:=ReleaseInstanceMode.BeforeAndAfterCall)> _
  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("The caller said: ""{0}""", msg)
    Console.WriteLine("For session {0}", OperationContext.Current.SessionId)
    Return "The service greets you: " & msg
  End Function

  Protected Overrides Sub Finalize()
    Console.WriteLine("Object {0} has been destroyed.", id)
    Console.WriteLine("For session {0}", session)
  End Sub
End Class

설명

사용 된 ReleaseInstanceMode 속성을 통해 Windows Communication Foundation (WCF) 메서드를 실행 하는 과정에서 서비스 개체를 재활용 하는 경우를 지정 합니다. 기본 동작은 InstanceContextMode 값에 따라 서비스 개체를 재활용하는 것입니다. ReleaseInstanceMode 속성을 설정하면 이 기본 동작이 변경됩니다.

ReleaseInstanceMode는 스레딩 수행을 보증하지는 않습니다. 서비스 실행 시 수정되지 않은 새로운 개체가 필요한 경우 InstanceContextMode 속성을 PerCall로 설정합니다.

트랜잭션 시나리오에서 ReleaseInstanceMode 속성은 메서드 호출을 처리하기 전에 서비스 개체와 연결된 기존 데이터를 정리하는 데 자주 사용됩니다. 또한 ReleaseServiceInstanceOnTransactionComplete 속성을 true로 설정하면 트랜잭션이 성공적으로 완료된 후 트랜잭션과 연결된 서비스 개체를 재활용하도록 할 수 있습니다.

다음 동작 중에서 선택할 수 있습니다.

  • 작업 호출 전에 서비스 개체 재활용

  • 작업 호출 후에 서비스 개체 재활용

  • 작업 호출 전후에 서비스 개체 재활용

  • 재활용 동작 없음

또한 OperationBehaviorAttribute를 사용하여 이중 클라이언트 애플리케이션에서 콜백 계약 작업을 구성할 수도 있습니다. 콜백 작업에 사용하는 경우 ReleaseInstanceMode 속성이 None이어야 하며, 그렇지 않으면 런타임에 InvalidOperationException 예외가 throw됩니다.

또한 서비스 개체를 ServiceHost.ServiceHost(Object, Uri[]) 생성자에 전달하는 방법으로 서비스를 생성한 경우 이 속성의 값은 None처럼 처리됩니다.

적용 대상