IsInitiating
このIsInitiating
パラメーターは、関連するメソッドによって実装された操作がサーバーでセッションを開始できるかどうかを指定します。セッションインスタンス化は、クライアントチャネルごとにクラスの個別のインスタンスを維持する機能です。このプロパティは、セッションの作成時に呼び出される最初の操作を操作に許可するかどうかを制御します。このパラメーターのデフォルトはです。これはtrue
、指定された操作がチャネルで最初に呼び出される可能性があることを意味します。このシナリオでは、このメソッドへの後続のすべての呼び出しは効果がありません(つまり、他のセッションは作成されません)。このパラメーターがに設定されてfalse
いる場合、クライアントはこのメソッドを呼び出す前に他のメソッドを呼び出すように強制されます。
これは、「操作の順序」を設定する場合に便利です。つまり、呼び出される他のメソッドは最初のメソッドから返されたものに依存するため、最初に呼び出す特定のメソッドが必要です。
たとえば、以下には3つのメソッド、つまりサービス操作が含まれています。最初の操作でセッションが作成され、最初に呼び出されるメソッドである必要があります。最後の操作であるログアウトは、セッションを閉じます。
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void Login(user);
[OperationContract(IsInitiating = false, IsTerminating = false)]
void BuyStock(string stocksymbol, int quantity);
[OperationContract(IsInitiating = false, IsTerminating = true)]
void Logout(user);
}
開始メソッドが呼び出されると、その開始プロパティに影響を与えることなく、そのメソッドに対して後続の呼び出しを行うことができます。
開始メソッド以外のメソッドが最初に呼び出された場合、次のエラーが返されます。
The operation ‘operationname’ cannot be the first operation to be called because
IsInitiating is false.
最初に開始メソッドを呼び出す必要があり、次に他の操作を呼び出すことができます。
IsOneWay
デフォルトのサービス通信は双方向です。双方向のサービス通信とは、サービス操作が着信メッセージを受信して応答を送信できることを意味します。
IsOneWayパラメーターは、サービス操作が応答メッセージを返すかどうかを指定します。このパラメーターのデフォルト値はです。これはfalse
、メソッドが応答メッセージを返さないことを意味します。
次の例は、一方向の通信を示しています。
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsOneWay = true)]
void Login(user);
[OperationContract(IsOneWay = false)]
void BuyStock(string stocksymbol, int quantity);
}
一方向通信では、クライアントは通信を開始してコードの実行を継続し、サービスからの応答を待ちません。双方向通信では、サービスからの応答を待ってからコードの実行を続行します。
一方向通信を使用することの欠点は、サービスがメッセージを正常に処理したかどうかを発信者が知る方法がないことです。
IsOneWay
プロパティが設定されている値を返すメソッドはすべてfalse
、例外を返します。
IsTerducing
このIsTerminating
プロパティは、呼び出されたサービス操作が通信セッションを終了するかどうかを指定します。次の例は、最後の呼び出しである
Logout()
、のIsTerminating
プロパティが次のように設定されていることを示していtrue
ます。
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void Login(user);
[OperationContract(IsInitiating = false, IsTerminating = false)]
void BuyStock(string stocksymbol, int quantity);
[OperationContract(IsInitiating = false, IsTerminating = true)]
void Logout(user);
}
IsTerminating
プロパティがに設定されている場合true
、応答メッセージが送信された後、セッションは閉じられます(応答メッセージを送信する必要がある場合)。クライアント側では、IsTerminating
値がtrue
WCFに、応答がクライアントに到着した後にのみチャネルを閉じるように指示します。