WCFとC#を使用して既存のSOAP Webサービスにクライアントを構築しました。最近、Webサービスが更新され、クライアントが機能しなくなりました。私がそれを見ている問題は、このブログポストで最もよく説明されています - Interoperability Gotcha: Order of XML Elements Yaron NavehWCF生成プロキシは順序依存であり、サービスはシーケンスに新しい要素を追加しました
私は、私の質問に対してYaronの例を借ります。
<s:element name="root">
<s:complexType>
<s:sequence>
<s:element name="elem1" type="s:string" />
<s:element name="elem2" type="s:string" />
</s:sequence>
</s:complexType>
</s:element">
は、WCFは、プロキシのような注文明示的な要素を使用し、生成:もともと、WSDLは、ように見えたアップデートで
[XmlElement(Order=0)]
public string Elem1
{
...
}
[XmlElement(Order=1)]
public string Elem2
{
...
}
は、新しい要素を型にに追加されましたが、この要素が追加されましたシーケンスの途中まで。
<s:element name="root">
<s:complexType>
<s:sequence>
<s:element name="elem1" type="s:string" />
<s:element name="NewElement" type="s:string" />
<s:element name="elem2" type="s:string" />
</s:sequence>
</s:complexType>
</s:element">
私のWCFプロキシは、追加されたNewElementの後に注文された要素を逆シリアル化できません。
Webサービスのプロバイダは、この変更が古いクライアントと下位互換性があると予想していました。どうやら、私のクライアントだけが動作を停止しています。
これはWSDLの大きな変更ですか?
既存のクライアントの破損を防ぐために、シーケンスの最後に新しい要素を追加する必要がありますか?これは後方互換性がありますか?
XmlElement属性でorderパラメータを削除した場合、私のプロキシはこのような将来の変更に対してより適切に準備されますか?注文を取り除くと私は何をあきらめますか?
真ん中にnewElementを追加すると、プロキシが壊れてしまい、大きな変更になりました。これが公正であれば、正確な質問は何ですか? – flup
私は少し質問をreworded。それがより明確であることを願っています。基本的に、私はこれについて二番目の意見が欲しい。私は、サービスの提供者に、彼らの変更が大きな変化であった(彼らはそうではないと思っていた)ことを明確に説明できるようにしたい。私はまた、この変更が急激な変化であるのを防ぐのに役立つ可能性のある代替的な変更を提供したいと思います。私はまた、これらのタイプの変更にどのようにより良い対応ができるかについていくつかアドバイスをしたいと思います。私はたくさんのことを求めていますが、建設的な提案やフィードバックは感謝しています。 –