OperationBehaviorAttribute.ReleaseInstanceMode Eigenschaft

Definition

Ruft einen Wert ab oder legt einen Wert fest, der angibt, wann das Dienstobjekt im Verlauf eines Vorgangsaufrufs wiederverwendet werden soll.

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

Eigenschaftswert

ReleaseInstanceMode

Einer der ReleaseInstanceMode-Werte. Der Standardwert ist None.

Ausnahmen

Der Wert ist keiner der ReleaseInstanceMode-Werte.

Beispiele

Mit dem folgenden Beispielcode wird die Nutzung von ReleaseInstanceMode zum Wiederverwenden von Dienstobjekten vor und nach dem Aufruf gezeigt.

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

Hinweise

Verwenden Sie die ReleaseInstanceMode Eigenschaft, um anzugeben, wann Windows Communication Foundation (WCF) ein Dienstobjekt im Verlauf der Ausführung einer Methode wiederverwendet. Das Standardverhalten besteht darin, gemäß dem InstanceContextMode-Wert ein Dienstobjekt wiederzuverwenden. Durch das Einstellen der ReleaseInstanceMode-Eigenschaft wird das Standardverhalten geändert.

ReleaseInstanceMode garantiert kein Threading. Wenn Sie beim Ausführen Ihres Diensts ein neues, nicht modifiziertes Objekt benötigen, legen Sie die InstanceContextMode-Eigenschaft auf PerCall fest.

In Transaktionsszenarien wird die ReleaseInstanceMode-Eigenschaft oft verwendet, um sicherzustellen, dass alte, dem Dienstobjekt zugeordnete Daten vor dem Verarbeiten eines Methodenaufrufs bereinigt werden. Sie können auch sicherstellen, dass Dienstobjekte, die Transaktionen zugeordnet sind, nach dem erfolgreichen Abschluss der Transaktion wiederverwendet werden. Legen Sie hierzu die ReleaseServiceInstanceOnTransactionComplete-Eigenschaft auf true fest.

Sie können zwischen folgenden Verhaltensweisen wählen:

  • Wiederverwenden eines Dienstobjekts, bevor ein Vorgang aufgerufen wird

  • Wiederverwenden eines Dienstobjekts, nachdem ein Vorgang aufgerufen wurde

  • Wiederverwenden eines Dienstobjekts sowohl vor als auch nach dem Aufrufen eines Vorgangs

  • Kein Wiederverwenden

Sie können auch OperationBehaviorAttribute verwenden, um in einer Duplexclientanwendung einen Rückrufvertragsvorgang zu konfigurieren. Die ReleaseInstanceMode-Eigenschaft muss bei Verwendung im Rahmen eines Rückrufvorgangs auf None eingestellt sein. Andernfalls wird während der Laufzeit eine InvalidOperationException-Ausnahme ausgelöst.

Darüber hinaus ist es wichtig, zu bedenken, dass wenn der Dienst durch Übergabe eines Dienstobjekts an den ServiceHost.ServiceHost(Object, Uri[])-Konstruktor erstellt wird, der Wert dieser Eigenschaft so behandelt wird, als wäre er auf None festgelegt.

Gilt für