OperationBehaviorAttribute.ReleaseInstanceMode Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość, która wskazuje, kiedy w trakcie wywołania operacji w celu odtworzenia obiektu usługi.
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
Wartość właściwości
ReleaseInstanceMode Jedna z wartości. Wartość domyślna to None.
Wyjątki
Wartość nie jest jedną z ReleaseInstanceMode wartości.
Przykłady
Poniższy przykładowy kod przedstawia użycie funkcji ReleaseInstanceMode do recyklingu obiektów usługi zarówno przed, jak i po wywołaniu.
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
Uwagi
ReleaseInstanceMode Użyj właściwości , aby określić, kiedy Windows Communication Foundation (WCF) przetwarza obiekt usługi w trakcie wykonywania metody. Domyślne zachowanie polega na odtworzeniu obiektu usługi zgodnie z wartością InstanceContextMode . ReleaseInstanceMode Ustawienie właściwości zmienia to zachowanie domyślne.
Dzięki temu ReleaseInstanceMode nie ma żadnych gwarancji wątkowych. Jeśli podczas uruchamiania usługi musisz mieć nowy, niezmodyfikowany obiekt, ustaw InstanceContextMode właściwość na PerCall.
W scenariuszach transakcji właściwość jest często używana do zapewnienia, ReleaseInstanceMode że stare dane skojarzone z obiektem usługi są czyszczone przed przetworzeniem wywołania metody. Można również upewnić się, że obiekty usługi skojarzone z transakcjami są poddawane recyklingu po pomyślnym zakończeniu ReleaseServiceInstanceOnTransactionComplete transakcji, ustawiając właściwość na true
.
Możesz wybrać następujące zachowania:
Odtwarzanie obiektu usługi przed wywołaniem operacji.
Odtwarzanie obiektu usługi po wywołaniu operacji.
Odtwarzanie obiektu usługi zarówno przed, jak i po wywołaniu operacji.
Brak zachowania recyklingu.
Można również użyć OperationBehaviorAttribute polecenia , aby skonfigurować operację kontraktu wywołania zwrotnego w aplikacji klienckiej dwukierunkowej. W przypadku użycia operacji wywołania zwrotnego ReleaseInstanceMode właściwość musi być None lub wyjątek InvalidOperationException jest zgłaszany w czasie wykonywania.
Ponadto należy pamiętać, że jeśli usługa jest tworzona przez przekazanie obiektu usługi do ServiceHost.ServiceHost(Object, Uri[]) konstruktora, wartość tej właściwości jest traktowana tak, jakby była Noneto .