OperationBehaviorAttribute.ReleaseInstanceMode Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
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.