2012-11-09 87 views
4

我有一個擁有數十個XSD的WSDL,我需要從WSDL生成客戶端代碼以使用Web服務。 Web服務的所有者使用Java並使用JAXB生成WSDL/XSD。 JAXB爲自定義綁定指定了一個「綁定文件」,並且所有者生成了一個與WSDL一起使用的XJB文件(JAXB自定義綁定文件)。使用綁定文件從JAXB WSDL生成C#客戶端代碼

我需要在C#中生成我的客戶端代碼,但svcutil和Visual Studio的「添加服務引用」沒有針對此自定義綁定文件的任何規定。有一些工具可以生成將客戶端代碼作爲參數的Java客戶端代碼,但沒有C#生成工具。我只是在沒有指定XJB的情況下運行svcutil,但是我無法使其工作。我沒有運氣就做了大量的Google搜索。關於如何使這項工作的任何想法?

+0

正如@Bogdan所建議的,綁定文件是一個紅色的鯡魚。我的問題是驗證名稱空間的一些類型聲明多次。我不確定它是否是由來自Java的WSDL引起的(因爲代碼生成與Java工具協同工作,但不適用於svcutil),但綁定文件似乎並不需要用於.Net客戶端代碼生成。 – koopaking3

回答

1

You can customize WSDLs通過提供結合的聲明,但這些是Java特定和定製應用於僅在從WSDL生成Java代碼。綁定可以內聯(嵌入在XSD/WSDL中)或單獨的文件中聲明。 你有一個單獨的文件,所以我認爲WSDL和XSD是「乾淨的」。

儘管JXB文件是紅色的鯡魚。一個WSDL應該是技術不可知的,它不關心Java,C#或其他什麼。您應該能夠生成代碼,因爲svcutil會忽略Java綁定。

svcutil會給你帶來什麼樣的錯誤?我發現它在WSDL缺少<type>部分時很難理解消息。您提到了幾十個XSD文件,它們如何在WSDL中導入並導入工作?如果你在Visual Studio中打開WSDL,它是否顯示驗證錯誤,它是在抱怨什麼?

最後,如果一切都失敗了,你可以將它全部(包括JXB文件)提供給一個Java工具,如wsimport,並從中獲取一些Java文件。您可以快速執行deploy with Endpoint.publish,然後將svcutil指向已部署的地址加上?wsdl,然後查看是否得到不同的結果。

+0

我實際上找到了一篇描述綁定文件如何工作的類似文章,並且我最終將綁定文件中的內容添加到了XSD文件中。這仍然沒有工作。錯誤全部是「在導出過程中生成的模式存在驗證錯誤」的行,然後描述錯誤。另一個錯誤是「無法導入wsdl:portType」,然後「元素'xxx'丟失。」 – koopaking3

+0

WSDL導入/包含三個XSD,其他所有XSD都從這三個導入/包含,而這些XSD繼續導入其他一些XSD等。我已將svcutil指向一個Web服務器,並在其中設置了WSDL和XSD文件夾結構,過去的B/C似乎更好地解釋XSD的路徑和位置。 Visual Studio中沒有驗證錯誤,除了ReSharper抱怨include:「無法解析'schemaLocation'屬性」 – koopaking3

+0

這看起來越來越像svcutil無法解析所有XSD導入,因此您會得到一個不完整的WSDL。Svcutil不關心Java綁定,所以不要將它們包含在WSDL中,而是嘗試將所有的XSD複製粘貼到WSDL中,並獲取一個包含所有內容的大文件(也許詢問給你文件的人只給你一個WSDL)。然後在將WSDL提供給svcutil之前驗證WSDL(使用專門爲WSDL設計的驗證器,可以免費在線獲得)。它很可能無法解析所有文件,因此將上下文限制爲只有一個文件。 – Bogdan

0

嘗試WSCF.blue並查看這對你的情況是否有用。請注意我對JABX並不熟悉,但是我正在使用這個工具來從wsdl中用C#生成代碼。

+0

我試過WSCF.blue沒有成功。還是)感謝你的建議。 – koopaking3

相關問題