OperationBehaviorAttribute.ReleaseInstanceMode Właściwość

Definicja

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

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 .

Dotyczy