wsdl生成Webservice客戶端和服務端C#代碼


Webservice一般是先開發服務,發布wsdl后由客戶端調用,但也有先有標准的wsdl文件,反過來開發服務的情況。為了保證開發的服務和wsdl一樣,可以把往wsdl生成服務端代碼,實現其中方法,再發布服務。

VS提供了一個命令,可以將wsdl生成服務端或客戶端代碼。打開:開始-所有程序-Microsoft Visual Studio2008-Visual Studio Tools-Visual Studio 2008命令提示

執行 wsdl /?,可以看到wsdl的說明,默認生成語言是CS,也可以設置VB、JS、CPP等;默認生成是客戶端代碼,也可生成服務端的抽象類或接口。

如wsdl d:\Hello.wsdl /server /out:d:\HelloServer.cs

生成Hello.wsdl服務端代碼的抽象類,稍加修改並實現其中內容即可發布。

 

我遇到的問題

在開發過程中,我拿到的wsdl是由Java用endpoint發布的,我重新生成C#服務端代碼再發布服務,得到的wsdl比不完全一樣

本以為也沒什么事,然而java那邊調用我的時候,說我的wsdl里<service>節點的<port>里沒有name=HelloHttpSoap11EndPoint的端口。

我注意了一下,標准的wsdl里有HelloHttpSoap11EndPoint(soap11)、HelloHttpSoap12EndPoint(soap12)和HelloHttpEndPoint,而我的wsdl里只有HelloSoap11(soap11)和HelloSoap12(soap12)兩個端口

對方說,他必須按照端口名稱才能調用到服務,我也不太清楚他那邊java是怎么調用的,總之我自己發布的wsdl和標准的不一樣,我也沒辦法,弄了整整一天,終於把這個問題大致解決好了,對,是大致!

將WebServiceBindingAttribute的name改成HelloHttpSoap11EndPoint(或者添加一個WebServiceBindingAttribute)

然后在所有函數說明的SoapDocumentMethodAttribute中,添加Binding=“HelloHttpSoap11EndPoint”,把方法綁定到端口上去。

如果你把所有方法都Binding=“HelloHttpSoap11EndPoint”,那發布的wsdl里就只有HelloHttpSoap11EndPoint(soap11)和HelloHttpSoap11EndPoint1(soap12)兩個端口,如果不是所有方法都Binding=“HelloHttpSoap11EndPoint”,那還會有原來的HelloSoap11和HelloSoap12端口

 

至此為止,我已經無能為力了,soap11的端口名稱對了,soap12端口名稱是自己生成的,和標准的還是不一樣,到現在也不知道怎么改。總之現在我們都用soap1.1協議,所以暫時沒有問題。期待高手幫忙解答。

-------------------------------------------------------------------------------------------

以下為例子:

E:\projects>wsdl /out:.\WebService.cs /protocol:SOAP /n:命名空間 .\DrugStore_xxx.wsdl

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM