Web サービスでデッドロック状態を回避するには

通信状態の Web サービス間でデッドロックが発生する状況はたくさんあります。しかし、次のルールに従うことで、ほとんどの問題を回避できます。

同期メソッドの呼び出し側の同期メソッドを呼び出さない

クライアントが Web サービスの同期メソッドを呼び出す場合、クライアントはそのメソッドが完了するまでブロックします。クライアントが元のメソッドの完了を待機している間にそのクライアントを呼び出そうとした(コールバックを呼び出す)場合、それぞれの側が相手側を待つことになります。これがデッドロックです。同じ状況は、コールバック ハンドラがその呼び出し側の同期メソッドを呼び出そうとした場合に発生することがあります。

メソッドからコールバックを呼び出す場合、そのメソッドまたはコールバックを非同期にすることによってデッドロックを回避できます。メソッドまたはコールバックを非同期にする簡単な方法は、メッセージ バッファリングを使用することです。

メソッドまたはコールバックをバッファするには

  1. デザイン ビューで、メソッドまたはコールバックを選択します。

  2. プロパティ ペインで、message-buffer プロパティを展開します。

  3. enable 属性の隣にあるドロップダウン リストから、true を選択します。

関連トピック

非同期性を利用して長期間の処理を実現する