2012-08-08 38 views
0

我在嘗試調用WSDL定義的函數時遇到了有關來自Visual Studio 2010的無效定義的錯誤。問題是你不能在兩個獨立的函數中使用相同的消息定義。所以我必須創建多個消息定義,而他們也一樣。如何在多個函數中使用相同的WSDL消息defenitions?

例如:

<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,而那兩天充滿了問題,並且欺騙了「勝利」。你解決一個問題的唯一途徑就是找出那個打開下一個門的門。

謝謝。 :)

回答

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 literal輸出定義翻轉過來。

+0

謝謝,現在就試試。 ;) – AmazingDreams 2012-08-09 09:31:14

+0

這修正了它,謝謝。 ;) – AmazingDreams 2012-08-09 10:07:34

+0

現在一個函數工作,而其他4個都返回null:S有什麼想法?已經用Google搜索了。 – AmazingDreams 2012-08-09 11:43:00

相關問題