当我在 Visual Studio 2008 (SP1) 上使用“添加服务参考”导入给定服务时,所有请求/响应消息都被不必要地包装到消息协定中(命名为 -->“操作名称”+“请求”/“响应”+ “1”在结尾)。
代码生成器说:
// CODEGEN: Generating message contract since the operation XXX is neither RPC nor
// document wrapped.
从 Java 服务生成 wsdl 的人说他们正在指定DOCUMENT-LITERAL/WRAPPED。
任何帮助/指针/线索将不胜感激。
更新:这是我的 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 中定义的所有类型并没有改变任何东西。
然后我(出于绝望)开始从头开始构建 wsdls 并使用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 上重现它,因为类型的嵌套非常深,我需要时间来彻底检查它。与此同时,我希望它可能会敲响警钟- 非常感谢任何帮助。