コールバックを使用してイベントのクライアントに通知する

コールバックは、Web サービスのクライアントにイベントが発生したことを知らせるために使用します。たとえば、リクエストの結果が準備できたときにクライアントに通知することができます。

コールバックは、デザイン ビューで [コールバックの追加] アクションを使用して簡単に Web サービスのインタフェースに追加できます。ただしそのようにすると、すべてのクライアント アプリケーションが満たせるわけではない要求がクライアントに課されることになります。

コールバックはクライアントへのメッセージ

Web サービスにメソッドを追加するときには、処理が実行されることを要求するためにクライアントが送信するメッセージを定義することになります。コールバックを定義するときには、Web サービスで発生したイベントをクライアントに通知するために Web サービスがクライアントに送信するメッセージを定義することになります。これらは完全に対称的です。WebLogic Server は Web サービスで XML および SOAP メッセージを受信することを可能にし、それらのメッセージを自動的に Web サービスに転送します。コールバックを受信するためには、クライアントは同じサービスを提供する環境で動作していなければなりません。つまり、クライアントはアプリケーション サーバまたは Web サーバで動作していなければなりません。

必要なインフラストラクチャを備える環境で動作していない場合、クライアントは Web サービスからコールバックを受信できません。

注意 : コールバックがクライアントへのメッセージであるという概念は、XML マップをコールバックのパラメータまたは戻り値に適用する必要がある場合に重要となります。コールバックのパラメータはクライアントへの送信メッセージに入れられ、戻り値はクライアントからの受信メッセージから変換されます。これは奇妙に感じられます。なぜなら、プログラマは通常すべてのパラメータを受信データと関連付け、戻り値を送信データと関連付けるからです。

注意 : 会話的な Web サービスでは、コールバックが期待したときに戻らない可能性があります。これは、同じ会話の一部を成しているメソッド呼び出しがシリアライズされているため、会話の間に呼び出されたコールバックは現在のメソッドが戻るまでは発生しないからです。メソッドの実行に時間がかかると、期待したときにコールバックの結果を利用できないことがあります。開発中のコードがコールバックの結果に依存している場合には、Web サービスにタイマー コントロールを追加してコールバックの結果をチェックし、コールバックが発生していない場合に取るべきアクションを指定します。

コールバックは要求していないのに送られてきたように見える

前の節で触れたように、コールバックはクライアントへのメッセージです。コールバックは本質的にそのコールバックが応答となっている元のリクエストとは切り離されるので、クライアントのホストにとっては要求してないのに送られてくるメッセージのように見えます。多くのホストは、直に拒絶するか、ファイアウォールなどのネットワーク セキュリティ機能に保護されることによって、要求していないネットワーク トラフィックの受信を受け入れません。したがって、そのような環境で動作するクライアントはコールバックを受信できません。

コールバック プロトコルの対応

コールバックに使用されるプロトコルおよびメッセージ フォーマットは、現在の会話を開始した start メソッドで使用されるプロトコルおよびメッセージ フォーマットと常に同じです。コールバックのプロトコルまたはメッセージ フォーマットをオーバーライドしようとすると、エラーが発生します。

Web サービスのクライアントがコールバックを受信できない場合

Web サービスのクライアントが前の節で説明した理由などでコールバックを受信できないが、それでも Web サービスを非同期にしたい場合は、ポーリング インタフェースを実装できます。

非同期 Web サービスの詳細については、非同期 Web サービスを参照してください。

ポーリング インタフェースの詳細については、コールバックの代わりにポーリングを使用するを参照してください。

関連トピック

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

会話を使用してステートを保持する