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伺服器。它應該可以工作。

廣告