天天看點

Web Service學習筆記(3)

WebService特性(不要把它與WebMethod混淆)允許向Web Service添加額外的資訊。文法:[WebService(PropertyName=value)],如果有多個屬性,可以使用逗号分隔。下面是它的一些屬性:

Description:描述Web Service

Name:當在浏覽器中測試頁面時,在Web Service幫助頁面的最頂部會顯示Web Service的名稱,且對所有潛在的Web Service使用者可用。預設情況下,Web Service的名稱是實作Web Service的類的名稱。

資料類型

Web Service可以使用任何CLR支援的資料類型作為參數或者傳回值。除了基本資料類型以為,還可以使用數組和基本類型的ArrayList。由于資料是通過XML在Web Service和用戶端之間傳遞的,那麼無論使用參數或傳回值,都必須使用XML Schema或者XSD表示。

類和結構體:Web Service能夠把使用者定義的類和結構體作為參數或者傳回值,這裡有一些需要記住的規則:1。所有類變量必須是基本資料類型或者基本資料類型的數組;2。所有類變量必須是公開的或者有一個公開的實作get和set通路器的屬性

DataSets:Web Service能夠通過XML編碼後傳回任何資料,這也包括傳回DataSet,這是因為ADO.NET内部使用XML來表示DataSet。一個DataSet僅是ADO.NET資料存儲中的一種可以由Web Service傳回的類型而已。

建立發現文檔

一旦建立完成Web Service,負責開發Web Service使用程式的開發人員需要找到一種方法,進而能夠了解伺服器上有哪些Web Service可用,這些Web Service提供了哪些方法,這些方法和屬性可接收哪些參數,以及這些Web 方法傳回的值是什麼。這個過程叫發現,是可選的。如果Web Service使用程式的開發者了解這些Web Service檔案的URL,那麼就不需要實施發現動作了。可以使用disco.exe在指令行方式下建立XML檔案(即發現文檔)。

打開vs命名提示符(注意不是在運作裡輸入cmd出來的那個指令提示符)

通過以下兩種方法發現發現文檔:

2。靜态發現檔案。如果Web Service得使用程式需要使用靜态發現檔案,那麼Web Service開發人員必須建立一個靜态發現檔案。

發現是一個過程,它是用來尋找那些Web Service可用、Web Service提供了哪些方法和屬性、方法和那些參數和屬性,已經web方法傳回的資料類型和屬性。它是一個可選過程。

下面是disco指令的參數說明

/d[omain]:domain        指定連接配接到要求身份驗證的代理伺服器時要使用的域名。

/nosave                不要将發現的文檔或結果(.wsdl、.xsd、.disco 和 .discomap 檔案)儲存到磁盤中。預設為儲存這些文檔。

/nologo                取消顯示 Microsoft 啟動标題。

/o[ut]:directoryName    指定用于儲存所發現文檔的輸出目錄。預設為目前目錄。

/p[assword]:password    指定當連接配接到要求身份驗證的代理伺服器時要使用的密碼。

/proxy:URL            指定用于 HTTP 請求的代理伺服器的 URL。預設為使用系統代理設定。

/proxydomain:domain或/pd:domain        指定連接配接到要求身份驗證的代理伺服器時要使用的域。

/proxypassword:password或/pp:password        指定當連接配接到要求身份驗證的代理伺服器時要使用的密碼。

/proxyusername:username或/pu:username        指定連接配接到要求身份驗證的代理伺服器時要使用的使用者名。

/u[sername]:username    指定連接配接到要求身份驗證的代理伺服器時要使用的使用者名。

/?    顯示該工具的指令文法和選項。

部署

部署Web Service與部署網頁差不多。.asmx檔案必須位于IIS提供的虛拟目錄中,這樣它才可以被浏覽器通路到。如果有一個Web Service的.disco檔案,那麼這個檔案也必須放在應用程式虛拟目錄下。同樣,如果應用程式需要建立一個web.config檔案,那麼也必須複制到應用程式虛拟目錄中。

預編譯程式集

和使用網頁一樣,對于已編譯的類和資源,既可以使用預編譯的assemblies,也可以使用動态編譯的assemblies來處理。

使用vs建立用戶端

下面用一個執行個體來建立用戶端程式來調用前面章節建立的Web Service(即StockWebService)

建立一個asp.net應用程式(也可以是winform窗體程式),右擊解決方案,選擇添加Web引用,如下圖所示

<a href="http://blog.51cto.com/attachment/201105/122637279.jpg" target="_blank"></a>

彈出如下圖的添加Web引用的界面。

<a href="http://blog.51cto.com/attachment/201105/122709540.jpg" target="_blank"></a>

在URL中輸入http://localhost:7953/Service1.asmx,即web service的位址,注意此時web service需處于運作狀态,點選右邊的箭頭,會将該web service中的方法查詢出來,我們可以點選某個方法看具體的資訊,如點選GetName ,則會出現調用的參數及SOAP、POST、GET對應的XML文檔。如下圖所示:

<a href="http://blog.51cto.com/attachment/201105/122746772.jpg" target="_blank"></a>

填寫web引用的名字後就可以添加web引用了。此時會發現asp.net應用程式中多了一些檔案,此時的目錄結構如下圖所示:

輕按兩下剛剛添加的web引用的名稱localhost打開對象浏覽器,可以看到web Service項目下的一些事件及參數,其中:方法名+Completed+EventArgs表示事件參數,方法名+Completed+EventHandler表示事件處理方法。

如下圖所示:

<a target="_blank" href="http://blog.51cto.com/attachment/201105/202002988.jpg"></a>

檢視asp.net應用程式的目錄,發現生成了兩個目錄Service References和Web References,其中Web References目錄下存放的是我們剛才添加的web引用,裡面的四個檔案為:Reference.cs、Reference.map、Service1.disco和Service1.wsdl。并且在web.config中自動添加了如下的代碼:

&lt;applicationSettings&gt;  

&lt;WebCallService.Properties.Settings&gt;  

&lt;setting name="WebCallService_localhost_Testttt" serializeAs="String"&gt;  

&lt;value&gt;http://localhost:7953/Service1.asmx&lt;/value&gt;  

&lt;/setting&gt;  

&lt;/WebCallService.Properties.Settings&gt;  

&lt;/applicationSettings&gt; 

然後再背景代碼中就可以調用web service了,注意有一個類為Testttt,這是我們重命名的一個Service。

背景調用代碼如下:

protected void Button1_Click(object sender, EventArgs e)  

{  

localhost.Testttt proxy = new localhost.Testttt();  

Response.Write("web:" + proxy.GetName("a"));  

即在頁面放一個button,點選button後傳回Name,這樣運作的結果為web:Symbol not found.

還有一個要注意的是,如果你用的是.net framework 4的話,那麼需要注冊一下,以管理者身份運作指令提示符,轉到C:\Windows\Microsoft.NET\Framework\v4.0.30128(不一定是這個目錄,反正類似),然後使用aspnet_regiis -i指令注冊。

接下來就是要釋出Web Service。用管理者身份運作vs,右擊解決方案,選擇釋出,選擇釋出到IIS,建立虛拟目錄,釋出。在浏覽器中輸入位址(沒有端口号,即預設80)可測試是否釋出成功。

釋出成功後,可以參照上面的方法調用Web Service,隻不過此時是IIS提供Web Service。 

    本文轉自xshf12345 51CTO部落格,原文連結:http://blog.51cto.com/alexis/573882,如需轉載請自行聯系原作者

繼續閱讀