0

在尝试调用 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 两天,那两天充满了问题和欺骗性的“胜利”。你在哪里解决了一个问题,却发现打开了通往下一个问题的大门。

谢谢。:)

4

1 回答 1

1

You are creating a WSDL reflecting an RPC style as evidenced by the 'type' attributes in the message part definitions. I am not entirely sure why this would cause a problem with VS, but the RPC style has gone out of vogue in favor of the document style (the modern versions of some tools have dropped support for RPC altogether).

You may have better results using the document style (document/literal/wrapped is our standard). You can read a little more about style differences here (http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/).

The changes required are not too complex and this site (http://wso2.org/library/knowledge-base/convert-rpc-encoded-wsdl-document-literal-wrapped-wsdl) gives some help, although I think the author flipped his rpc vs literal output definitions in the #Output message section.

于 2012-08-09T06:36:10.643 回答