Webサービスにメソッドを追加します。古いクライアントは Web 参照を更新する必要がありますか?
-
22-09-2019 - |
質問
ProductA は、ProductA とは別の展開である唯一の Web サービスを使用します。両方を本番環境にデプロイします。
その後、ProductB を作成します。その取り組みの中で、私たちは唯一の Web サービスに新しいメソッドを追加します。ProductA の出荷時には、その新しいメソッドは WSDL に含まれていませんでした。開発中の製品 A には変更を加えません。
ProductB を実稼働環境にデプロイするとき、唯一の Web サービスの新しいバージョンも (ProductA が期待しているのと同じエンドポイント URL に) デプロイします (実稼働環境に)。ProductA を運用環境に再デプロイしません。
唯一の Web サービスの WSDL は運用環境で変更されましたが、ProductA によって使用されるメソッドのシグネチャは変更されていません。これらはまだ WSDL 内にあります。
この方法で唯一の Web サービスをアップグレードすることにより、ProductA に問題は発生しますか?
元のクライアントのメソッドが変更されないまま Web サービスが変更された場合、Web サービスのクライアントをアップグレードする必要がありますか?
解決
はありません。あなたが製品Aを単独で使用している方法を残した限り、あなたはWebReferenceの製品Aのコピーを更新する必要はありません。
他のヒント
既存の回答にもう少し詳細を追加すると、クライアント プロキシへの対応する変更が必要となる Web サービスへの変更は次のとおりです。
- メソッドの削除;
- メソッドのシグネチャの変更。
- バインディング/動作の変更 (つまり、暗号化を使用します)。
新しいメソッドの追加、または型への新しいフィールド/プロパティの追加は、ほとんどの場合、破壊的な変更ではありません (それでも、クライアントでテストすることに問題はありません)。
もちろん、クライアントが実際にできるわけではないことに注意してください。 使用 これらの新しいメソッドまたはプロパティは、再構築されるまで保持されます。でも壊れないよ 既存 機能性。
通常は「ノー」と言うでしょう。ただし、50 を超えるクライアントのうち 1 つは、JAX-WS を使用すると問題が発生します。次のようなエラーが発生します。
javax.xml.ws.WebServiceException:
The Endpoint validation failed to validate due to the following errors:
:: Invalid Endpoint Interface :: :: The operation names in the WSDL portType
do not match the method names in the SEI or Web service implementation class.
wsdl operations = [...]
これは次のことに関連していると思います。
それは次のように言います:」ベストプラクティス:更新された WSDL ファイルを受信するたびに、クライアント側のアーティファクトを必ず再生成してください。」
ただし、サーバー側の WSDL はクライアント インスタンスで実行時にチェックされるため、新しいメソッドを追加するとすぐに失敗します。問題の詳細や範囲はわかりませんが、サービスによって提供される WSDL 内の新しいメソッドで中断する SOAP クライアント実装を作成できるようです。
私は、高齢化のスレッド上でチャイムにしたくなかった、と多くのキーポイントは、すでに行われているが、私はフレームワークの移行についてのメモを追加したいです。私は、.NET 2.0まで、すべての方法から4.6を通って移動した後、時には異常な動作を持っていました。私は、特定のエラーの詳細を詳しく説明しますが、彼らはいくつかの時間前でした。
私はこれらのコメントのほとんどにもかかわらず、私は最小限の変更は、ここで説明した後でも、ウェブの参照をアップグレードしていないクライアントからの多数の問題があった、また、それを追加したい。そして、私は、これはの結果である可能性がありますことを追加される場合があります新しいフレームワーク。私は、WSDLは常に再生成する必要があります年間でMSDNでの多くの場所で読んだことがあります。
私は実際にこれを自動的に行うための手法を探してきました。だから、Webサービスが更新されますないとき、クライアント側のクラッシュを防止するように。私はその検索でこのスレッド間でつまずいています。
そうでもない答えが、あまりにも長い間、ここでコメントを。
、あなたも、あなたがのの既存のサービス参照を更新しない場合がありますどのような問題尋ねるべきクライアント。テストに必ずそのシナリオだけでなく、。
我々は、サーバー上の唯一の重要な何かのようなサービスにメソッドを追加することを考える傾向がありますが、は、サービス参照が更新されたとき、これは実際にクライアントのコードを変更していることに注意してください。
一部の組織では、ときに、クライアントコードの変更クライアントコードをテストするには信じています。