OperationBehaviorAttribute.ReleaseInstanceMode Vlastnost

Definice

Získá nebo nastaví hodnotu, která označuje, kdy v průběhu vyvolání operace recyklovat objekt služby.

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

Hodnota vlastnosti

ReleaseInstanceMode

Jedna z ReleaseInstanceMode hodnot. Výchozí formát je None.

Výjimky

Hodnota není jednou z ReleaseInstanceMode hodnot.

Příklady

Následující příklad kódu ukazuje použití ReleaseInstanceMode k recyklaci objektů služby před i po volání.

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

Poznámky

ReleaseInstanceMode Vlastnost slouží k určení, kdy Windows Communication Foundation (WCF) recykluje objekt služby v průběhu provádění metody. Výchozím chováním je recyklace objektu služby podle InstanceContextMode hodnoty. ReleaseInstanceMode Nastavení vlastnosti změní výchozí chování.

Negarantuje ReleaseInstanceMode žádné vlákno. Pokud potřebujete mít nový, nemodifikovaný objekt při spuštění vaší služby, nastavte InstanceContextMode vlastnost na PerCall.

Ve scénářích transakcí se ReleaseInstanceMode vlastnost často používá k zajištění, že stará data přidružená k objektu služby se před zpracováním volání metody vyčistí. Můžete také zajistit, aby objekty služby přidružené k transakcím byly recyklovány po úspěšném dokončení transakce nastavením ReleaseServiceInstanceOnTransactionComplete vlastnosti na true.

Můžete zvolit následující chování:

  • Před zavolání operace recyklujte objekt služby.

  • Recyklujte objekt služby po zavolání operace.

  • Recyklujte objekt služby před i po zavolání operace.

  • Žádné chování při recyklaci.

Můžete také použít OperationBehaviorAttribute ke konfiguraci operace zpětného volání kontraktu v duplexní klientské aplikaci. Při použití při operaci ReleaseInstanceMode zpětného volání musí None být vlastnost nebo InvalidOperationException je vyvolán výjimka za běhu.

Kromě toho je důležité si uvědomit, že pokud je služba vytvořena předáním objektu služby konstruktoru ServiceHost.ServiceHost(Object, Uri[]) , hodnota této vlastnosti je považována za None.

Platí pro