Visual Studio 2012 で Web サービスとして追加すると、驚異的な量の冗長性を持つ Web サービスの使用を開始しました。これを示す 2 つの WSDL を次に示します。
http://webservices.sabre.com/wsdl/sabreXML1.0.00/usg/SessionCreateRQ.wsdl
http://webservices.sabre.com/wsdl/sabreXML1.0.00/usg/SessionCloseRQ.wsdl
これらは、それぞれ新しいセッションを作成し、それを閉じるサービスです。各サービスには独自のクラスがあり、そのクラスには、生成されたすべてのプロキシで再定義されMessageHeader
たクラスからのメンバーがあります。MessageData
このようなものは他にもありますが、すべての名前は挙げません。
Service1.MessageHeader は Service2.MessageHeader と同じタイプではないため、リクエストを設定し、タイムスタンプや認証などのエンベロープ内のすべての一般的なものを入力するヘルパー関数を作成したい場合、これが困難になります。私はダックタイピングを試しましたが、私が見た限り、これの入れ子になった性質はそのアプローチを妨げます.
WSDL を見ると、これらのクラスはすべて同じ名前空間からのものとして定義されています。つまり、両方の WSDL で、次のMessageHeader
ように定義されます。
<xsd:import namespace="http://www.ebxml.org/namespaces/messageHeader" schemaLocation="msg-header-2_0.xsd"/>
...
<part name="header" element="eb:MessageHeader"/>
これらが両方のクラスで同じものであることをVSに理解させ、何らかの方法でそれらを両方に共通のものとして分離させる方法はありますか? それとも「ウェブサービスは島」ですか?必要な Web サービスの種類ごとに個別のコードを作成する必要はありません。これらの 2 つだけではありません。しかし、それらのすべてがこれらの同じクラスを使用しています。
プロキシ クラスを手動でハッキングすることを考えました。しかし、VS が何らかの操作を行うとは予想していなかった舞台裏での動作を台無しにしてしまったために、VS が何らかのギアを滑らせてしまうのではないかという私の恐れを超えて、WSDL で何かが変更された場合、自動生成全体が失われます。再同期が必要です。
私はこれを C# と Oxygene の両方で試しましたが、同じ問題に遭遇しました。VSの他の言語でも同じだと思います。WSDL を理解する方法に関連しているようです。
だれかが尋ねる前に、実際の Web サービスについて何も変更することはできません。それはまったく別の会社であり、私の気まぐれに基づいて広く使用されているシステムを再設計することに関心がある会社ではありません.