Visual Studio 2008(SP1)で[サービス参照の追加]を使用して特定のサービスをインポートすると、すべての要求/応答メッセージが不必要にメッセージコントラクトにラップされます(名前は-> "operationName" + "Request" / "Response" +最後に「1」)。
コードジェネレーターによると:
// CODEGEN: Generating message contract since the operation XXX is neither RPC nor
// document wrapped.
Javaサービスからwsdlを生成している人は、DOCUMENT-LITERAL/WRAPPEDを指定していると言います。
ヘルプ/ポインタ/手がかりをいただければ幸いです。
更新:これは、疑わしいと思われる操作の1つに対する私のwsdlのサンプルです。応答と比較して、要求のメッセージ要素属性の不一致に注意してください。
<!- imports namespaces and defines elements -->
<wsdl:types>
<xsd:schema targetNamespace="http://WHATEVER/" xmlns:xsd_1="http://WHATEVER_1/" xmlns:xsd_2="http://WHATEVER_2/">
<xsd:import namespace="http://WHATEVER_1/" schemaLocation="WHATEVER_1.xsd"/>
<xsd:import namespace="http://WHATEVER_2/" schemaLocation="WHATEVER_2.xsd"/>
<xsd:element name="myOperationResponse" type="xsd_1:MyOperationResponse"/>
<xsd:element name="myOperation" type="xsd_1:MyOperationRequest"/>
</xsd:schema>
</wsdl:types>
<!- declares messages - NOTE the mismatch on the request element attribute compared to response -->
<wsdl:message name="myOperationRequest">
<wsdl:part element="tns:myOperation" name="request"/>
</wsdl:message>
<wsdl:message name="myOperationResponse">
<wsdl:part element="tns:myOperationResponse" name="response"/>
</wsdl:message>
<!- operations -->
<wsdl:portType name="MyService">
<wsdl:operation name="myOperation">
<wsdl:input message="tns:myOperationRequest"/>
<wsdl:output message="tns:myOperationResponse"/>
<wsdl:fault message="tns:myOperationFault" name="myOperationFault"/>
<wsdl:fault message="tns:myOperationFault1" name="myOperationFault1"/>
</wsdl:operation>
</wsdl:portType>
更新2:インポートによってメッセージコントラクトの生成がトリガーされる可能性があるため、インポートした名前空間(別のxsdにある)にあるすべてのタイプをwsdlにプルしました。驚いたことに、そうではなく、wsdlですべての型を定義しても何も変わりませんでした。
次に、(必死になって)wsdlを最初から作成maxOccurs
し、シーケンス属性に含まれる要素属性の属性で遊んで、望ましくないメッセージコントラクト生成の動作を再現することができました。
要素のサンプルは次のとおりです。
<xsd:element name="myElement">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" name="arg1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
maxOccurs
メッセージとして使用される要素(基本的にすべての要求と応答)で遊ぶと、次のことが起こります。
- maxOccurs="1"はラッピングをトリガーしません
- macOcccurs> 1は、ラッピングをトリガーします
- maxOccurs="unbounded"はラッピングをトリガーします
タイプのネストが非常に深くなるため、これを本番環境のwsdlでまだ再現できませんでした。これを徹底的に調べるには、時間がかかります。その間、私はそれがベルを鳴らすかもしれないことを望んでいます-どんな助けでも高く評価されます。