OperationBehaviorAttribute.ReleaseInstanceMode OperationBehaviorAttribute.ReleaseInstanceMode OperationBehaviorAttribute.ReleaseInstanceMode OperationBehaviorAttribute.ReleaseInstanceMode Property

Definizione

Ottiene o imposta un valore che indica quando riciclare l'oggetto servizio nel corso della chiamata a un'operazione.Gets or sets a value that indicates when in the course of an operation invocation to recycle the service object.

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à

Uno dei valori di ReleaseInstanceMode.One of the ReleaseInstanceMode values. Il valore predefinito è None.The default is None.

Eccezioni

Esempi

Nell'esempio di codice seguente viene mostrato come utilizzare l'oggetto ReleaseInstanceMode per riciclare gli oggetti servizio sia prima sia dopo una chiamata.The following example code shows the use of ReleaseInstanceMode to recycle service objects both before and after a call.

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 nel corso dell'esecuzione di un metodo.Use the ReleaseInstanceMode property to specify when Windows Communication Foundation (WCF) recycles a service object in the course of executing a method. Il comportamento predefinito è riciclare un oggetto servizio in base al valore della proprietà InstanceContextMode.The default behavior is to recycle a service object according to the InstanceContextMode value. L'impostazione della proprietà ReleaseInstanceMode modifica tale comportamento predefinito.Setting the ReleaseInstanceMode property changes that default behavior.

La proprietà ReleaseInstanceMode non fornisce alcuna garanzia di threading.The ReleaseInstanceMode makes no threading guarantees. Se è necessario disporre di un oggetto nuovo non modificato quando il servizio viene eseguito, impostare la proprietà InstanceContextMode su PerCall.If you must have a new, unmodified object when your service runs, set the InstanceContextMode property to 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.In transaction scenarios, the ReleaseInstanceMode property is often used to ensure that old data associated with the service object is cleaned up prior to processing a method call. È inoltre possibile garantire che gli oggetti servizio associati a transazioni vengano riciclati al termine della transazione impostando la proprietà ReleaseServiceInstanceOnTransactionComplete su true.You can also ensure that service objects associated with transactions are recycled after the transaction successfully completes by setting the ReleaseServiceInstanceOnTransactionComplete property to true.

È possibile scegliere i comportamenti seguenti:You can choose the following behaviors:

  • Riciclo di un oggetto servizio prima della chiamata di un'operazione.Recycle a service object before an operation is called.

  • Riciclo di un oggetto servizio dopo la chiamata di un'operazione.Recycle a service object after an operation is called.

  • Riciclo di un oggetto servizio prima e dopo la chiamata di un'operazione.Recycle a service object both before and after an operation is called.

  • Nessun comportamento di riciclo.No recycling behavior.

L'attributo OperationBehaviorAttribute può essere inoltre utilizzato per configurare un'operazione di un contratto di callback in un'applicazione client duplex.You can also use OperationBehaviorAttribute to configure a callback contract operation in a duplex client application. 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.When used on a callback operation, the ReleaseInstanceMode property must be None or an InvalidOperationException exception is thrown at runtime.

È 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.In addition, it is important to realize that if the service is created by passing a service object to the ServiceHost.ServiceHost(Object, Uri[]) constructor, the value of this property is treated as if it were None.

Si applica a