不用編寫客戶端調試WebServices

發表于:2007-05-25來源:作者:點擊數: 標簽:調試不用客戶端編寫webservices
當你寫好了一個Web Services,肯定會需要一個客戶端(調用端)來調用它,以檢查運行是否正常。在Visual Studio.NET中你可以直接點擊“運行”按鈕,系統會自動生成一個Web Services的 測試 頁來調用Web Method,雖然很方便,但這個測試頁是通過HTTP/GET協議將


當你寫好了一個Web Services,肯定會需要一個客戶端(調用端)來調用它,以檢查運行是否正常。在Visual Studio.NET中你可以直接點擊“運行”按鈕,系統會自動生成一個Web Services的測試頁來調用Web Method,雖然很方便,但這個測試頁是通過HTTP/GET協議將參數加在URL后面傳給Web Method的,這種調用方式(HTTP/POST也一樣)只適合比較簡單的Web Services,比如:傳進來的參數是簡單類型的,或者SOAP請求中不含SOAP消息頭等等。

    如果我們的Web Services應用了一些比較復雜的功能,例如:請求參數為GET和POST協議都不能編碼的復雜類型,應用了定制的SOAP消息編碼格式(SOAP Encoding),使用了SOAP擴展等等。這個時候就需要使用WSDL的SOAP綁定,通過SOAP協議進行消息編碼來進行調用,也就是說我們得自己去專門為這個Web Services寫一個客戶端。其中很重要的一點就是如果Web Services客戶端要使用SOAP進行調用,客戶端的代理類必須從 SoapHttpClientProtocol 類派生,而VS.NET自動生成的測試頁的代理類是從HttpGetClientProtocol類派生的。當然VS.NET也能比較方便的編寫客戶端,而且你根本不必去理會代理類,因為這是自動生成的,你要做的就是像在本地一樣調用Web Method。

但問題又來了,如果你想直接編輯客戶端發送的SOAP請求消息并查看接收到的響應消息時,在VS.NET里的實現就比較麻煩了,還得編一個SOAP擴展,這樣一來工作量可就大了。好在Microsoft發布了.NET WebService Studio(WSS),它是用來對Web services進行交互性測試的一個萬能的工具。WSS是一個很?。?16K)的Windows Form應用程序,它結合了GotDotNet網站早期的WSDL Verification和WSDL Browser工具的特點,并增加了一個直觀的用戶界面,目前版本號為1.0。

下面我就按照對一個Web Services的方法的調用步驟來講解一下這個軟件的使用:

首先,在WSDL EndPoint文本框中輸入一個有效的asmx或wsdl文件的URL,你也可以通過Browse Wsdl按鈕打開一個本地的WSDL文件。然后在文本框中回車,WSS就下載WSDL(如果文本框中是asmx文件就生成它的WSDL),自動為該Web Services生成并編譯一個客戶端代理,整個過程可在Massages面板中看到。最后在Invoke面板中顯示出一個包括該Web Services所有方法的樹狀視圖。同時你可以在WSDL & Proxy面板中看到由這個工具自動生成的WSDL文件和其鏈接的XML文檔定義Schema、客戶端代理類(Proxy)、客戶端調用代碼(ClientCode)的詳細內容。在Proxy代碼中我們可以清楚地看到代理類繼承自SoapHttpClientProtocol,因此這個工具毫無疑問是基于SOAP協議對Web Sevices進行調用,這樣我們就可以使用與SOAP相關的各種功能。

再來看看Invoke面板,點擊一個Web方法,右邊的Input框中會馬上按照SOAP消息的結構以樹形方式顯示出調用這個方法所需的參數和其結構;在某個參數上點擊一下,對應Input的Value框中也會馬上顯示出這個參數的類型信息,并且可以直接填入這個參數的值或指定其值為空,參數都填好后就可以通過Invoke按鈕進行調用了。調用結束后,Output框中也會按照與Input框一樣的方式顯示這個方法調用返回的結果和其數據結構,并且同樣能顯示出返回結果的數據類型和值。

讓人興奮的是,在Input和Output框中可以直接編輯消息頭中的元素,這在測試要求提供消息頭的Web Sevices時是十分必要的。如果要使用消息頭(當然,前提是WSDL里做了相關約定),在消息頭里的某個頭元素上點擊一下,對應的Value框中會顯示出相關的類型信息,然后將IsNull設置為False,這時頭元素前面就多了個加號,展開它就可以看到其下的參數,按上面講過的方法可以設置頭元素的參數的值。設置好各參數后,就可以調用需要消息頭的Web Sevices了。真是方便至極呀!

最后就該介紹Request/Response了,這個面板主要顯示的是利用WSS這個工具調用遠程方法時生成的請求消息和接收到的響應消息的內容。當你在Invoke面板中調用了一個方法之后,就可以在Request和Response框里看到原始的請求消息和響應消息,而且可以直接對SOAP請求消息進行修改,比如修改某元素的值或屬性等等,然后按Send重新調用就可以看到結果,這對于深入理解SOAP消息有很大的幫助。在該面板的左邊還可以設置發送請求的屬性(GET/POST)、基本認證的用戶名和密碼、是否使用Cookie等,以便用更靈活的方式調用Web Services。

如果你在局域網中用VS.NET進行過Web Services相關的開發,可能會發現通過Web引用只能添加局域網內的Web Services,而對Inte.net上提供的服務的卻無能為力(這個問題可以通過編碼的方式對客戶端代理類的HTTP代理屬性進行設置來解決),這是因為絕大部分Web Services都是通過HTTP協議進行調用,而局域網的HTTP代理服務器需要對外部的訪問請求進行認證。正因為VS.NET中對于Web引用沒有代理設置機制才會導致上述問題。所以,必須填入正確的驗證信息(例如用戶名和密碼等)才能使綁定了HTTP協議的SOAP請求消息跨越防火墻到達服務端。在這一點上WSS又一次很好的簡化了繁瑣的步驟。

打開Edit菜單的Options,在WsdlSettings項中可以設置代理服務器的域、用戶名、密碼,這樣就可以方便地在局域網中直接調用Internet上的Web Services了,夠簡單吧!同時你還可以選擇除SOAP外的其它的數據編碼方式(HTTP/GET、HTTP/POST)和自動生成的代碼的語言(C#、VB.NET、JS)以及SOAP消息內容的顯示風格等。

當然遺憾還是有的,比如缺乏對數據集DateSet的支持、不能通過UDDI進行Web Services查詢等,但愿這些問題能在下一版中得到解決和完善。但瑕不掩瑜,WSS會給你帶來一種絕對不一樣的感受,只要你愿意,甚至可以直接把它當成所有Web Services的客戶端,快來盡情享受Web Services的樂趣吧!

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97