OperationBehaviorAttribute.ReleaseInstanceMode Proprietà

Definizione

Ottiene o imposta un valore che indica quando riciclare l'oggetto servizio nel corso della chiamata a un'operazione.

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

Valore della proprietà

ReleaseInstanceMode

Uno dei valori di ReleaseInstanceMode. Il valore predefinito è None.

Eccezioni

Il valore non appartiene all'enumerazione ReleaseInstanceMode.

Esempio

Nell'esempio di codice seguente viene mostrato come utilizzare l'oggetto ReleaseInstanceMode per riciclare gli oggetti servizio sia prima sia dopo una chiamata.

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

Commenti

Utilizzare la ReleaseInstanceMode proprietà per specificare quando Windows Communication Foundation (WCF) ricicla un oggetto servizio durante l'esecuzione di un metodo. Il comportamento predefinito è riciclare un oggetto servizio in base al valore della proprietà InstanceContextMode. L'impostazione della proprietà ReleaseInstanceMode modifica tale comportamento predefinito.

La proprietà ReleaseInstanceMode non fornisce alcuna garanzia di threading. Se è necessario disporre di un oggetto nuovo non modificato quando il servizio viene eseguito, impostare la proprietà InstanceContextMode su PerCall.

Negli scenari di transazione, la proprietà ReleaseInstanceMode viene spesso utilizzata per garantire la pulitura dei dati non aggiornati associati all'oggetto servizio prima di elaborare una chiamata a un metodo. È inoltre possibile garantire che gli oggetti servizio associati a transazioni vengano riciclati al termine della transazione impostando la proprietà ReleaseServiceInstanceOnTransactionComplete su true.

È possibile scegliere i comportamenti seguenti:

  • Riciclo di un oggetto servizio prima della chiamata di un'operazione.

  • Riciclo di un oggetto servizio dopo la chiamata di un'operazione.

  • Riciclo di un oggetto servizio prima e dopo la chiamata di un'operazione.

  • Nessun comportamento di riciclo.

L'attributo OperationBehaviorAttribute può essere inoltre utilizzato per configurare un'operazione di un contratto di callback in un'applicazione client duplex. Se viene utilizzato in un'operazione di callback, la proprietà ReleaseInstanceMode deve essere None; in caso contrario verrà generata un'eccezione InvalidOperationException in fase di esecuzione.

È inoltre importante comprendere che, se il servizio viene creato passando un oggetto servizio al costruttore ServiceHost.ServiceHost(Object, Uri[]), il valore di questa proprietà viene trattato come fosse None.

Si applica a