我在这里发布了这个问题,但没有得到任何答案。所以我也在这里发布了它。
我对WSDL有一个问题。
我有一个WSDL,其中包含以下两种方法:
<portType name="TestService">
<operation name="add">
<input
wsam:Action="http://service.psvm.com/testservice/TestService/addRequest"
message="tns:add"
name="InputNums" />
<output
wsam:Action="http://service.psvm.com/testservice/TestService/addResponse"
message="tns:addResponse"
name="Result" />
</operation>
<operation name="subtract">
<input
wsam:Action="http://service.psvm.com/testservice/TestService/subtractRequest"
message="tns:subtract"
name="InputNums" />
<output
wsam:Action="http://service.psvm.com/testservice/TestService/subtractResponse"
message="tns:subtractResponse"
name="Result" />
</operation>
</portType>
正如您所看到的,add和subtract这两个操作都有输入和输出消息,它们分别使用相同的名称“InputNums”和“Result”。 当我尝试验证此WSDL时,我会收到以下错误消息:
“The name 'InputNums' specified for this input element is not unique. The name of an input element must be unique from the names of all other input and output elements defined in the 'TestService' port type.”
我阅读了这里的WSDL规范,但并没有清楚地说明原因。它说:
“The name attribute of the input and output elements provides a unique name among all input and output elements within the enclosing port type. In order to avoid having to name each input and output element within an operation, WSDL provides some default values based on the operation name.”
为了避免为每个操作中的每个输入和输出元素命名,WSDL提供了一些默认值。但是为什么这是一个规则?难道不应该是警告吗?如果开发人员想要,难道他们不能自己提供名称吗?
此外,我不明白为什么这是一个问题,因为客户端调用Web服务时,它们会调用名为“add”或“subtract”的特定操作。我的最后一个问题是 - 只要操作名称不同,参数名称为什么很重要?如果有的话,请有人解释一下这样做的后果是什么?