OperationContractAttribute.IsInitiating 屬性

定義

取得或設定值,這個值表示某個方法是否實作了可以在伺服器上初始化工作階段的作業 (若這樣的工作階段存在的話)。

public:
 property bool IsInitiating { bool get(); void set(bool value); };
public bool IsInitiating { get; set; }
member this.IsInitiating : bool with get, set
Public Property IsInitiating As Boolean

屬性值

Boolean

如果允許作業在伺服器上初始化工作階段,則為 true,否則為 false。 預設為 true

範例

下列範例是一個實作服務合約的服務,此合約指定三個方法。 此服務需要工作階段。 若呼叫者先呼叫其他作業,而非 MethodOne,通道會拒絕並擲回例外狀況。 當呼叫者呼叫 MethodOne 以初始化工作階段時,該呼叫者隨時可呼叫 MethodThree 終止通訊工作階段。 MethodTwo 可以在會話期間呼叫任意次數。

[ServiceContract(SessionMode=SessionMode.Required)]  
public class InitializeAndTerminateService  
{  
  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=true,  
    IsTerminating=false  
  )]  
  public void MethodOne()  
  {  
    return;  
  }  

  [OperationContract(  
    IsInitiating=false,  
    IsTerminating=false  
  )]  
  public int MethodTwo(int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=false,  
    IsTerminating=true  
  )]  
  public void MethodThree()  
  {  
    return;  
  }  
}  

備註

IsInitiating 屬性控制作業是否可在工作階段建立時,成為第一個被呼叫的作業。

注意

ServiceContractAttribute.SessionMode 的值必須為 AllowedRequired,而且使用的繫結必須要求或允許工作階段,IsInitiating 屬性才能正常運作。

預設為 true,表示作業可成為通道上第一個被呼叫的作業。 除了呼叫此方法,後續對初始化方法的呼叫就不再有效用。 不會再建立其他工作階段。 若合約不使用工作階段,則將 IsInitiating 設為 false 的設定會忽略。

一般而言,您可將 IsInitiating 設為 false,強制用戶端在叫用此方法前,先呼叫服務上的另一個方法。 例如,若您的服務有一系列的作業,這些作業依存於一個訂單 ID 號碼,您可將 服務作業的 設為 ,將其餘服務作業設為 。 這樣可確保每個新用戶端在使用服務所公開的其他方法之前,都先取得了訂單 ID。

注意

IsInitiatingAction 屬性之間有互動。 服務合約中,只能有一個把 Action 屬性設為 "*" 的服務作業。 當 屬性設定為 時 IsInitiating false ,裝載于服務類別實作之相同接聽 URI 的任何服務合約群組,都可以有許多服務作業,且 Action 屬性設定為 「 * 」。 不過,只有其中一個服務方法可以將 Action 屬性設定為 「 * 」,並將 IsInitiating 屬性設定為 true

若服務收到一個非初始化作業的訊息,該服務會傳回 ActionNotSupported SOAP 錯誤。 用戶端會把它當做 FaultException。 若用戶端先呼叫非初始化作業,用戶端會擲回 System.InvalidOperationException

如需詳細資訊,請參閱 使用會話

適用於