1

この記事の最初のセクションで述べたように(.chm ファイル - 以下の注を参照)

一方向呼び出しは、非同期呼び出しと同じではありません。一方向呼び出しがサービスに到達すると、それらは一度にすべてディスパッチされず、一度に 1 つずつディスパッチされるようにサービス側でキューに入れられる場合があります...キューに入れられたメッセージの数がキューの容量を超えた場合、一方向の呼び出しを発行した場合でも、クライアントはブロックされます。

一方向呼び出しが呼び出された場合、呼び出し元に制御が返されるのはいつですか? 同じ記事の冒頭では、単方向呼び出しがファイア アンド フォーゲット操作に使用され、それによって一種の非同期呼び出しがシミュレートされると述べられています。セッションフル WCF サービスに、セッションを開始する Login() 一方向メソッドがある場合、このメソッドはいつ呼び出し元に制御を返しますか? サービスでメソッドが実際に実行される前に戻りますか? もしそうなら、どうすればメソッドがサービスで実行されたことを確認できますか?

サービスがログイン手順中に発生する可能性のあるエラーをクライアントに返すようにしたい場合、ファイアアンドフォーゲット動作を実現する唯一の方法は非同期呼び出しでしょうか?


注: 上記の引用は、Juval Lowy によるWCF Essentials - What You Need To Know About One-Way Calls, Callbacks, And Eventsという記事からのもので、MSDN マガジンの 2006 年 10 月号に掲載されています。上記のリンクは、MSDN のヘルプ ファイル (.chm) 形式へのリンクです。リンクされた CHM ファイルが機能しない場合 (私はできませんでした)、7zip で開くことができます。

4

1 に答える 1

4

セッションフル WCF サービスに、セッションを開始する Login 一方向メソッドがある場合、このメソッドはいつ制御を呼び出し元に返しますか?

OneWay 呼び出しの場合: サービス呼び出しがディスパッチまたはキューに入れられるとすぐに、呼び出し元は実行を続けます。基本的に、サービスが呼び出しを正常に受信するとすぐに。

メソッドがサービスで実行されたことをどのように確認できますか?

クライアントが例外を取得しない場合、サービス呼び出しは実行されました (または実行されます)。サービス呼び出しが実際にいつ実行されるか、またはそれが成功したか例外をスローしたかは、クライアントには不明です。

サービスがログイン手順中に発生する可能性のあるエラーをクライアントに返すようにしたい場合、ファイアアンドフォーゲット動作を実現する唯一の方法は非同期呼び出しでしょうか?

これは意味がありません。ファイア アンド フォーゲットとは、定義上、結果を忘れることを意味します。クライアントに値やエラーを返しません。ただし、非同期呼び出しは起動して忘れるわけではなく、エラーを返します。

于 2012-08-24T17:15:16.183 に答える