OperationBehaviorAttribute.ReleaseInstanceMode 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定值,指出要在作業引動過程期間的哪個階段回收服務物件。
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 值。 預設為 None。
例外狀況
該值不是其中一個 ReleaseInstanceMode 值。
範例
下列範例程式碼示範如何使用 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 的方式進行處理。