当社の Web サービスは、さまざまな理由 (クライアントへの待ち時間の短縮など) でさまざまなサーバーに分散されており、すべてが最新であるとは限りません。特定の Web サービスが古すぎるためにメソッドが存在しない場合に例外をスローするよりも、サービスが特定のメソッドに応答するかどうかを呼び出す前にクライアントにチェックさせ、それ以外の場合は機能を無効にすることができれば (またはそれを回避します)。
それを行う方法はありますか?
当社の Web サービスは、さまざまな理由 (クライアントへの待ち時間の短縮など) でさまざまなサーバーに分散されており、すべてが最新であるとは限りません。特定の Web サービスが古すぎるためにメソッドが存在しない場合に例外をスローするよりも、サービスが特定のメソッドに応答するかどうかを呼び出す前にクライアントにチェックさせ、それ以外の場合は機能を無効にすることができれば (またはそれを回避します)。
それを行う方法はありますか?
WSDL を取得します (URL に ?wsdl を追加します) - 任意の方法で解析できます。
Web サービスを単体テストして、署名が壊れていないことを確認します。メソッドの署名を壊すコードを書くと、それに応じて他のアプリケーションを調整することができます。
または、Web サービスを壊したり、バージョン管理できるように公開したりしないでください。http://services.domain.com/MyService/V1.1/Service.asmx (.NET 用) のように、v1.2 を公開して重大な変更を加えても、v1.1 を使用するアプリケーションが壊れないようにします。 .
また、Web サービスの管理が非常に面倒な場合は、内部 UDDI サーバーの使用も検討します。UDDI のグリーン ページを使用すると、サービスについて知りたいことがわかります。
SOAP リクエストを作成しているときは、HTTP リクエストをサーバーに送信しているだけです。サーバーがそれを理解すると、HTTP 200 と XML で応答します。そうでない場合は、エラー HTTP コード (404、500、...) を送信します。
Web サービスによって公開されている「メソッド」の存在を確認する一般的な方法はありません。自動の場合は公開されている WSDL を使用するか、単に「メソッド」を使用して応答のエラーをチェックしてみてください (ユーザーに例外を送信する必要はありません...)。
また、私があなたをよく理解しているかどうかわかりませんが、メソッドが存在するかどうかを確認するために1回、存在する場合は実際に呼び出すために2回、サーバーにクエリを実行することを考えていますか? そうでない場合はエラーをチェックし、エラーがある場合は通常どおり続行します。