我在这里发布了这个问题。但没有得到任何答案。所以我也把它贴在这里。
我有一个关于 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>
如您所见,加法和减法操作都具有分别具有相同名称“InputNums”和“Result”的输入和输出消息。
当我尝试验证此 WSDL 时,我收到以下错误:
为此输入元素指定的名称“InputNums”不是唯一的。输入元素的名称必须与“TestService”端口类型中定义的所有其他输入和输出元素的名称不同。
我在这里阅读了 WSDL 规范,但没有清楚地说明原因(至少对我而言)。它说:
输入和输出元素的名称属性在封闭端口类型内的所有输入和输出元素中提供唯一名称。为了避免必须命名操作中的每个输入和输出元素,WSDL 提供了一些基于操作名称的默认值。
为了避免命名每个输入/输出元素,WSDL 提供了默认值。但为什么这是一个规则?不应该是警告吗?如果开发商愿意,他/她不能自己提供姓名吗?
此外,我不明白为什么这是一个问题,因为当客户端调用 Web 服务时,它们会使用称为“添加”或“减法”的特定操作名称进行调用。我的问题最后是 - 只要操作名称不同,为什么参数名称很重要?如果有的话,有人可以解释一下拥有这样的 WSDL 的后果吗?