OperationBehaviorAttribute.ReleaseInstanceMode 属性

定义

获取或设置一个值,该值指示在调用操作过程中回收服务对象的时间。

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

属性值

ReleaseInstanceMode

ReleaseInstanceMode 值之一。 默认值为 None

例外

示例

下面的代码示例演示如何使用 ReleaseInstanceMode 在调用之前和之后均回收服务对象。

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

注解

使用此属性ReleaseInstanceMode指定何时Windows Communication Foundation (WCF) 在执行方法的过程中回收服务对象。 默认行为是根据 InstanceContextMode 值来回收服务对象。 通过设置 ReleaseInstanceMode 属性,可以更改该默认行为。

ReleaseInstanceMode 不提供线程保证。 如果在服务运行时必须有一个新的未修改对象,请将 InstanceContextMode 属性设置为 PerCall

在事务处理方案中,通常会使用 ReleaseInstanceMode 属性来确保在调用方法之前已清除与服务对象关联的旧数据。 也可以通过将 ReleaseServiceInstanceOnTransactionComplete 属性设置为 true 来确保在成功完成事务后回收与事务关联的服务对象。

可以选择下列行为:

  • 在调用操作之前回收服务对象。

  • 在调用操作之后回收服务对象。

  • 在调用操作之前和之后均回收服务对象。

  • 无回收行为。

也可以使用 OperationBehaviorAttribute 在双工客户端应用程序中配置回调协定操作。 对回调操作使用它时,ReleaseInstanceMode 属性必须为 None,否则会在运行时引发 InvalidOperationException 异常。

此外,一定要了解如果服务是通过将服务对象传递给 ServiceHost.ServiceHost(Object, Uri[]) 构造函数来创建的,则会按照此属性的值为 None 来进行处理。

适用于