19

ProductAは、ProductAとは別のデプロイメントである唯一のWebサービスを使用します。両方を本番環境にデプロイします。

後で、ProductBを作成します。その努力の中で、私たちは唯一のWebサービスに新しいメソッドを追加します。ProductAが出荷されたとき、その新しいメソッドはWSDLに含まれていませんでした。開発中のProductAに変更はありません。

ProductBを本番環境にデプロイするときは、唯一のWebサービスの新しいバージョンも(ProductAが検出することを期待しているのと同じエンドポイントURLに)デプロイします。ProductAを本番環境に再デプロイすることはありません。

唯一のWebサービスのWSDLは本番環境で変更されていますが、ProductAによって使用されているメソッドのシグネチャは変更されていません。それらはまだWSDLにあります。

この方法で唯一のWebサービスをアップグレードすることにより、ProductAに問題が発生しますか?

元のクライアントのメソッドを変更しないようにWebサービスが変更された場合、Webサービスのクライアントをアップグレードする必要がありますか?

4

5 に答える 5

17

いいえ。製品 A が単独で使用するメソッドを残している限り、製品 A の WebReference のコピーを更新する必要はありません。

于 2010-02-10T01:35:56.207 に答える
15

既存の回答にもう少し詳細を追加するために、クライアント プロキシに対応する変更を必要とする Web サービスへの唯一の変更は次のとおりです。

  • メソッドの削除;
  • メソッド シグネチャの変更。
  • バインディング/動作の変更 (つまり、暗号化を使用する)。

新しいメソッドの追加、または新しいフィールド/プロパティのタイプへの追加は、ほとんどの場合、非破壊的な変更です (それでも、クライアントでテストすることは問題ありません)。

もちろん、再構築するまで、クライアントはこれらの新しいメソッドやプロパティを実際に使用できないことに注意してください。ただし、既存の機能が損なわれることはありません。

于 2010-02-10T01:48:56.827 に答える
2

通常、私はノーと言うでしょう。ただし、JAX-WS を使用してこれに問題がある 50 以上のクライアントのうちの 1 つがあります。次のようなエラーが表示されます。

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 = [...] 

私はそれがこれに関連していると信じています:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_devjaxws_exposewebmethod.html

ベスト プラクティス: 更新された WSDL ファイルを受け取るたびに、必ずクライアント側のアーティファクトを再生成してください。」

ただし、サーバー側の WSDL は実行時にクライアント インスタンスでチェックされるため、新しいメソッドを追加するとすぐに失敗します。問題の詳細や範囲はわかりませんが、サービスによって提供される WSDL の新しいメソッドで壊れる SOAP クライアント実装を作成できるようです。

于 2013-04-25T00:09:15.083 に答える
1

既存のクライアントのサービス リファレンスを更新しなくても問題ないことには同意しますが、既存のクライアントのサービス リファレンスを更新した場合にどのような問題が発生するかについても確認する必要があります。そのシナリオも必ずテストしてください。

メソッドをサービスに追加することは、サーバー上でのみ重要なことだと考える傾向がありますが、サービス参照が更新されると、実際にはクライアントのコードが変更されることに注意してください。

一部の組織は、クライアント コードが変更されたときにクライアント コードをテストすることを信じています。

于 2010-02-10T01:49:35.047 に答える