OperationBehaviorAttribute.ReleaseInstanceMode Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece un valor que indica en qué momento del curso de una invocación de la operación se recicla el objeto de servicio.
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
Valor de propiedad
Uno de los valores de ReleaseInstanceMode. De manera predeterminada, es None.
Excepciones
El valor no es uno de los valores de ReleaseInstanceMode.
Ejemplos
El código de ejemplo siguiente muestra el uso de ReleaseInstanceMode para reciclar los objetos de servicio antes y después de una llamada.
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
Comentarios
Utilice la ReleaseInstanceMode propiedad para especificar cuándo Windows Communication Foundation (WCF) recicla un objeto de servicio durante la ejecución de un método. El comportamiento predeterminado es reciclar un objeto de servicio según el valor InstanceContextMode. Al establecer la propiedad ReleaseInstanceMode se cambia ese comportamiento predeterminado.
ReleaseInstanceMode no realiza ninguna garantía para subprocesos. Si debe tener un objeto nuevo y no modificado cuando su servicio se ejecuta, establezca la propiedad InstanceContextMode en PerCall.
En escenarios de la transacción, la propiedad ReleaseInstanceMode se utiliza a menudo para asegurarse que los datos antiguos asociados al objeto de servicio se limpian antes de procesar una llamada al método. También puede asegurarse que los objetos de servicio asociados a transacciones se reciclen después de que la transacción se complete correctamente estableciendo la propiedad ReleaseServiceInstanceOnTransactionComplete en true
.
Puede elegir los siguientes comportamientos:
Recicle un objeto de servicio antes de que se llame a una operación.
Recicle un objeto de servicio después de que se llame a una operación.
Recicle un objeto de servicio antes y después de que se llame a una operación.
Sin comportamiento de reciclaje.
También puede utilizar OperationBehaviorAttribute para configurar una operación del contrato de devolución de llamada en una aplicación de cliente dúplex. Cuando se utiliza en una operación de devolución de llamada, la propiedad ReleaseInstanceMode debe ser None o se produce una excepción InvalidOperationException en tiempo de ejecución.
Además, es importante comprender que si el servicio se crea pasando un objeto de servicio al constructor ServiceHost.ServiceHost(Object, Uri[]), el valor de esta propiedad se trata como si fuera None.