
- 學習 Web 服務
- Web 服務 - 首頁
- 什麼是 Web 服務?
- 為什麼使用 Web 服務?
- Web 服務 - 特性
- Web 服務 - 架構
- Web 服務 - 元件
- Web 服務 - 示例
- Web 服務 - 安全性
- Web 服務 - 標準
- Web 服務 - 總結
- Web 服務資源
- Web 服務 - 常見問題解答
- Web 服務 - 快速指南
- Web 服務 - 有用資源
Web 服務 - 示例
基於Web服務架構,我們在Web服務實現中建立了以下兩個元件:
服務提供商或釋出者
這是Web服務的提供者。服務提供商實現服務並使其在網際網路或內網上可用。
我們將使用 .NET SDK 編寫併發佈一個簡單的Web服務。
服務請求者或消費者
這是任何Web服務的消費者。請求者透過開啟網路連線併發送XML請求來利用現有的Web服務。
我們還將編寫兩個Web服務請求者:一個基於Web的消費者(ASP.NET應用程式)和另一個基於Windows應用程式的消費者。
下面是我們的第一個Web服務示例,它充當服務提供商,並將兩種方法(add 和 SayHello)作為Web服務公開,供應用程式使用。這是Web服務的標準模板。.NET Web服務使用.asmx副檔名。請注意,公開為Web服務的方法具有WebMethod屬性。將此檔案另存為FirstService.asmx,儲存到IIS虛擬目錄(如配置IIS中所述;例如,c:\MyWebSerces)。
FirstService.asmx <%@ WebService language = "C#" class = "FirstService" %> using System; using System.Web.Services; using System.Xml.Serialization; [WebService(Namespace = "https:///MyWebServices/")] public class FirstService : WebService{ [WebMethod] public int Add(int a, int b) { return a + b; } [WebMethod] public String SayHello() { return "Hello World"; } }
要測試Web服務,必須先發布它。Web服務可以在內網或網際網路上釋出。我們將在此本地機器上執行的IIS上釋出此Web服務。讓我們從配置IIS開始。
開啟開始→設定→控制面板→管理工具→Internet資訊服務管理器。
展開並右鍵單擊預設網站;選擇新建→虛擬目錄。虛擬目錄建立嚮導開啟。單擊下一步。
將開啟“虛擬目錄別名”螢幕。鍵入虛擬目錄名稱。例如,MyWebServices。單擊下一步。
將開啟“網站內容目錄”螢幕。
輸入虛擬目錄的目錄路徑名。例如,c:\MyWebServices。單擊下一步。
將開啟“訪問許可權”螢幕。根據您的需求更改設定。對於此練習,讓我們保留預設設定。
單擊下一步按鈕。它將完成IIS配置。
單擊完成以完成配置。
要測試IIS是否已正確配置,請將HTML檔案(例如,x.html)複製到上面建立的虛擬目錄(C:\MyWebServices)中。現在,開啟Internet Explorer並鍵入**https:///MyWebServices/x.html**。它應該開啟x.html檔案。
**注意** - 如果不起作用,請嘗試將localhost替換為機器的IP地址。如果仍然不起作用,請檢查IIS是否正在執行;您可能需要重新配置IIS和虛擬目錄。
要測試此Web服務,請將FirstService.asmx複製到上面建立的IIS虛擬目錄(C:\MyWebServices)中。在Internet Explorer中開啟Web服務(https:///MyWebServices/FirstService.asmx)。它應該開啟您的Web服務頁面。該頁面應該包含應用程式公開為Web服務的兩種方法的連結。恭喜!您已經編寫了您的第一個Web服務!
測試Web服務
正如我們剛剛看到的,在.NET Framework中編寫Web服務很容易。在.NET框架中編寫Web服務消費者也很容易;但是,它稍微複雜一些。如前所述,我們將編寫兩種型別的服務消費者,一種基於Web,另一種基於Windows應用程式的消費者。讓我們編寫我們的第一個Web服務消費者。
基於Web的服務消費者
按照如下所示編寫基於Web的消費者。將其命名為WebApp.aspx。請注意,這是一個ASP.NET應用程式。將其儲存在Web服務的虛擬目錄中(c:\MyWebServices\WebApp.axpx)。
此應用程式有兩個文字欄位,用於從使用者處獲取要新增的數字。它有一個按鈕“執行”,單擊該按鈕後將獲取Add和SayHello Web服務。
WebApp.aspx <%@ Page Language = "C#" %> <script runat = "server"> void runSrvice_Click(Object sender, EventArgs e) { FirstService mySvc = new FirstService(); Label1.Text = mySvc.SayHello(); Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text), Int32.Parse(txtNum2.Text)).ToString(); } </script> <html> <head> </head> <body> <form runat = "server"> <p> <em>First Number to Add </em>: <asp:TextBox id = "txtNum1" runat = "server" Width = "43px">4< /asp:TextBox> </p> <p> <em>Second Number To Add </em>: <asp:TextBox id = "txtNum2" runat = "server" Width = "44px">5</asp:TextBox> </p> <p> <strong><u>Web Service Result -</u></strong> </p> <p> <em>Hello world Service</em> : <asp:Label id = "Label1" runat = "server" Font-Underline = "True">Label< /asp:Label> </p> <p> <em>Add Service</em> : & <asp:Label id = "Label2" runat = "server" Font-Underline = "True">Label</asp:Label> </p> <p align = "left"> <asp:Button id = "runSrvice" onclick = "runSrvice_Click" runat = "server" Text = "Execute"></asp:Button> </p> </form> </body> </html>
建立消費者後,我們需要為要使用的Web服務建立一個代理。當引用已新增的Web服務時,Visual Studio .NET會自動為我們完成這項工作。以下是需要遵循的步驟:
為要使用的Web服務建立代理。使用.NET SDK提供的WSDL實用程式建立代理。此實用程式從Web服務中提取資訊並建立代理。代理僅對特定Web服務有效。如果您需要使用其他Web服務,則也需要為此服務建立一個代理。當新增Web服務引用時,Visual Studio .NET會自動為您建立代理。使用.NET SDK提供的WSDL實用程式為Web服務建立代理。它將在當前目錄中建立FirstSevice.cs檔案。我們需要編譯它以建立Web服務的FirstService.dll(代理)。
c:> WSDL https:///MyWebServices/FirstService.asmx?WSDL c:> csc /t:library FirstService.cs
將編譯後的代理放入Web服務的虛擬目錄的bin目錄中(c:\MyWebServices\bin)。Internet資訊服務 (IIS) 在此目錄中查詢代理。
以我們已經做過的方式建立服務消費者。請注意,在消費者中例項化了Web服務代理的物件。此代理負責與服務進行互動。
在IE中鍵入消費者的URL以進行測試(例如,https:///MyWebServices/WebApp.aspx)。
基於Windows應用程式的Web服務消費者
編寫基於Windows應用程式的Web服務消費者與編寫任何其他Windows應用程式相同。您只需要建立代理(我們已經完成了)並在編譯應用程式時引用此代理。以下是使用Web服務的Windows應用程式。
WinApp.cs using System; using System.IO; namespace SvcConsumer { class SvcEater { public static void Main(String[] args) { FirstService mySvc = new FirstService(); Console.WriteLine("Calling Hello World Service: " + mySvc.SayHello()); Console.WriteLine("Calling Add(2, 3) Service: " + mySvc.Add(2, 3).ToString()); } } }
使用`c:\>csc /r:FirstService.dll WinApp.cs`編譯它。它將建立WinApp.exe。執行它以測試應用程式和Web服務。
現在,問題出現了:您如何確定此應用程式實際上是在呼叫Web服務?
測試很簡單。停止Web伺服器,以便無法聯絡Web服務。現在,執行WinApp應用程式。它將引發執行時異常。現在,重新啟動Web伺服器。它應該可以工作。