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 的方式進行處理。