在尝试调用WSDL定义函数时,我遇到了一些来自Visual Studio 2010的无效定义错误。问题是您不能在两个单独的函数中使用相同的消息定义。所以我必须创建多个消息定义,同时他们也这样做。
例如:
<message name="Hi">
<part name="input" type="xsd:string">
</message>
<message name="Say_hi_back">
<part name="return" type="xsd:string">
</message>
<message name="I_hate_you">
<part name="return" type="xsd:string">
</message>
<portType name="DataPort">
<operation name="sayHello">
<input message="tns:Hi"/>
<output message="tns:Say_hi_back"/>
</operation>
<operation name="sayIHateYou">
<input message="tns:Hi"/>
<output message="tns:I_hate_you"/>
</operation>
</portType>
现在调用其中一个函数会给你一个错误。除非我添加一个具有完全相同部分的Hi2并将操作定义中的一个输入消息更改为tns:Hi2。
这是为什么?这没有道理。我正在构建一项服务,我将不得不将customerID添加到我即将构建的所有功能中。获得约会的一个功能,一个用于支付,一个用于所有。这意味着我必须复制10次消息定义,并将它们命名为getCustomerID * N *。
我很多时候还要有多个输入参数。比方说,有人想要在日期x和日期y之间进行所有约会。 (这适用于所有存储的信息,如支付等)虽然我只需要一个带有int,日期和日期的消息。我将不得不写一份巨大的文件。
所以我的问题是,是否还有其他方法可以做到这一点。我只和WSDL一起工作了两天,那两天充满了问题,欺骗了胜利&#39;胜利。你在哪里解决一个问题只是为了找到打开下一个门的大门。
感谢。 :)
答案 0 :(得分:1)
您正在创建反映RPC样式的WSDL,如消息部件定义中的“type”属性所示。我不完全确定为什么这会导致VS出现问题,但RPC样式已经不再流行,而是支持文档样式(某些工具的现代版本已完全放弃对RPC的支持)。
使用文档样式可能会有更好的结果(document / literal / wrapped是我们的标准)。您可以在此处阅读有关样式差异的更多信息(http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/)。
所需的更改不是太复杂,而且此站点(http://wso2.org/library/knowledge-base/convert-rpc-encoded-wsdl-document-literal-wrapped-wsdl)提供了一些帮助,但我认为作者在#Output消息部分中翻转了他的rpc vs文字输出定义。