OperationBehaviorAttribute.ReleaseInstanceMode Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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.