0

C# から呼び出す必要がある 2 セットの Web サービスがあります。これらの Web サービスのグループはどちらも同じプロバイダーからのものであり、両方の wsdls に存在する 1 つの complexType を共有しています。

これは、複合型定義がどのように見えるかです

<wsdl:types>
    <schema targetNamespace="http://abc.com/ws/myutil" xmlns="http://www.w3.org/2001/XMLSchema">
        <complexType name="mytype">
            <sequence>
                <element name .....
                <element name ....
                <element name .....
            </sequence>
        </complexType>
    </schema>
    .....
</wsdl:types>

上記の複合型は wsdls の両方に存在し、タイプ mytype の targetNamespace は両方の wsdls で同じです。

これにより、 で問題が発生することはありませんjava。私Axisはスタブを生成するために使用しclass、タイプ mytype はディレクトリに書き込まれ、wsdl の targetNamespace 属性で指定されたとおりcom\abc\ws\myutilに配置されます。package com.abc.ws.myutil

したがって、最初の wsdl から Web サービスのみを呼び出したい場合は、最初の wsdl で axis を実行し、クラスを生成してから jar を作成します。

2 番目の wsdl から Web サービスのみを呼び出したい場合は、2 番目の wsdl で axis を実行し、クラスを生成してから jar を作成します。

両方の wsdl から Web サービスを呼び出したい場合は、まず最初の wsdl で axis を実行し、次に 2 番目の wsdl で実行してから、jar を作成します。

2 番目の wsdl で Axis を実行すると、com\abc\ws\myutil に生成された mytype.java クラス ファイルが上書きされます。しかし、最初の wsdl から mytype.java に対して生成されたクラス ファイルは、2 番目の wsdl から生成されたものと同じであるため、これは問題ではありません。私が作成した結合 jar には mytype が 1 つだけ含まれており、両方の wsdl の Web サービスで使用できます。

ただし、この同じシナリオでは、C# で問題が発生します。最初の wsdl URL に Web 参照を追加すると、生成されたクラスが最初の名前空間に配置されます。次に、2 番目の wsdl URL に Web 参照を追加すると、生成されたクラスが 2 番目の名前空間に配置されます。

したがって、2 つの名前空間に 2 つの mytype クラスが存在することになります。

だから私の質問は、wsdlで指定されたものをAdd Webreference使用しないのはなぜですか? targetNamespacemytype クラスが 1 つだけになるようにする方法はありますか?

ASP.NET VB プログラムでも同じ問題が発生します。

4

1 に答える 1

1

コマンドライン ツールを使用する場合は、次のスイッチwsdl.exeを使用できます。/shareTypes

/シェアタイプ

タイプ共有機能をオンにします。この機能は、異なるサービス間で共有される同一の型の単一の型定義を持つ 1 つのコード ファイルを作成します (名前空間、名前、およびワイヤー署名は同一である必要があります)。コマンドライン パラメータとして http:// URL を使用してサービスを参照するか、ローカル ファイルの discomap ドキュメントを作成します。

于 2013-04-05T07:52:55.287 に答える