Compartir vía


OperationBehaviorAttribute.ReleaseInstanceMode Propiedad

Definición

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

ReleaseInstanceMode

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.

Se aplica a