3

私はWCFを初めて使用します。頻繁にwcfコードと記事を注視します。多くのコードを見た後、私はしばしば非常に基本的なことに固執し、以下の質問についての詳細な議論はありませんでした。だからここに私のいくつかの基本的な質問があります....そしてサンプルの状況とサンプルのコードで詳細な議論を探しています。

[OperationContract(IsInitiating=false, IsOneWay=false)]
bool Add_Contact(int sessionkey, string Newusrname);

IsInitiating=falseまたはtrueの意味は何ですか。いつtrueまたはfalseに設定する必要がありますか?IsOneWay=falseまたはtrueの意味は何ですか。いつtrueまたはfalseに設定する必要がありますか?

私の質問は非常に基本的であり、このフォーラムを監視するたびに多くの学者がいると思います。状況をシミュレートするためのサンプルコードがほとんどなく、他のオプションよりもどのオプションを選択する必要があるかなど、多くの状況で詳細に最良の回答が得られることを願っています。ありがとう

4

2 に答える 2

7

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値がtrueWCFに、応答がクライアントに到着した後にのみチャネルを閉じるように指示します。

于 2013-01-03T11:35:13.290 に答える