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
使用しないのはなぜですか? targetNamespace
mytype クラスが 1 つだけになるようにする方法はありますか?
ASP.NET VB プログラムでも同じ問題が発生します。