天天看點

Web Services 指南之:Web Services 的一些例子

基于 web service 架構,我們建立以下兩個元件作為 web service 實作的一部分:

服務提供者或者釋出者

它是 web service 的提供者。服務提供者實作了 web service 并使得它可以通過網際網路或者内部網進行通路。

接下來我們會使用 .NET SDK 來編寫并釋出一個簡單的 web service。

服務請求者或者消費者

它是 web service 的消費者。請求者通過打開一個網絡連接配接并發送一個 XML 請求來利用一個現成的 web service。

接下來我們也将編寫兩個 web service 請求者:一個基于 web 的消費者(ASP.NET 應用),另一個是基于 Windows 應用的消費者。

接下來給出的是我們的第一個 web service 的例子,它将作為一個服務提供者公開兩個方法(

add 和

SayHello)來作為将被應用所使用的 web service。這是 web service 的一個标準模闆。.NET web service 使用的是 .asmx 擴充名。注意一個方法要公開為一個 web service 的話要具備

WebMethod 屬性。将本檔案在 IIS 虛拟目錄中儲存為

FirstService.asmx。

FirstService.asmx

<%@ WebService language = "C" class = "FirstService" %>

using System;
using System.Web.Services;
using System.Xml.Serialization;

[WebService(Namespace="http://localhost/MyWebServices/")]
public class FirstService : WebService
{
   [WebMethod]
   public int Add(int a, int b)
   {
      return a + b;
   }

   [WebMethod]
   public String SayHello()
   {
   return "Hello World";
   }
}      

要測試一個 web service,首先得先進行釋出。一個 web service 既可以釋出在内部網也可以釋出在網際網路。我們将會把這個 web service 釋出在一台内網機器上運作的 IIS 上。我們先從配置 IIS 開始。

  • 打開 → 設定 → 控制台 → 管理工具 → 網際網路服務管理器
  • 展開并右擊預設的 web 站點;選擇 建立 → 虛拟目錄。虛拟目錄建立向導将被打開。點選下一步。
  • "虛拟目錄别名"螢幕将被打開。輸入虛拟目錄名。比如,MyWebServices,點選下一步。
  • "網站内容目錄" 螢幕将被打開。
  • 輸入虛拟目錄的目錄路徑名。比如,c:\MyWebServices,點選下一步。
  • "通路權限" 螢幕将被打開。根據你的需求對設定進行更改。本示例中我們保持預設設定。
  • 點選下一步按鈕。它将完成 IIS 配置。
  • 點選完成來結束配置。

要驗證 IIS 是否被正确配置,拷貝一個 HTML 檔案(比如,

x.html)到上面建立的虛拟目錄(

C:\MyWebServices)中。之後,打開 IE 并輸入

http://localhost/MyWebServices/x.html。能打開

x.html 檔案就是正常。

注意:如果沒有打開

x.html,試着将

localhost 替換為你機器的 IP 位址。如果仍然不行,檢查 IIS 是否在運作;或者重新配置 IIS 以及虛拟目錄。

然後驗證 web service,将

FirstService.asmx 複制到上面建立的 IIS 虛拟目錄中(

C:\MyWebServices)。在 IE 中打開 web service(

http://localhost/MyWebServices/FirstService.asmx)。能夠打開你的 web service 頁面就是正常。該頁面應該能夠連結到你公開為 web service 的兩個方法。恭喜!你已經寫好了你的第一個 web service!

測試 web service

如剛才所見,在 .NET 架構下編寫 web service 還是很簡單的。在 .NET 架構下編寫 web service 消費者也很簡單。如上所述,我們将編寫兩種類型的服務消費者,一個基于 web 的而另一個基于 Windows 應用。現在我們來寫我們的第一個 web service 消費者。

基于 web 的服務消費者

如下寫一個基于 web 的消費者。将其命名為

WebApp.aspx。注意它是一個 ASP.NET 應用。将它儲存着 web service 測虛拟目錄(

c:\MyWebServices\WebApp.axpx)。

該應用有兩個用于擷取使用者添加的輸入框。它有一個 Execute 按鈕,當被點選的時候将得到

Add 和

SayHello 兩個 web service。

WebApp.axpx

<%@ 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" οnclick="runSrvice_Click" runat="server"  Text="Execute"></asp:Button>
         </p>
         
      </form>
      
   </body>
</html>      

消費者建立好以後,還需要為要被消費的 web service 建立一個代理。在引用一個已添加的 web service 以後這個工作會由 Visual Studio .NET 自動完成。下面是接下來的步驟:

  • 為要被消費的 web service 建立一個代理。使用 NET SDK 提供的 WSDL 工具來建立代理。這個工具從 web service 中抽取資訊并建立一個代理。該代理隻對該特定 web service 有效。如果你需要消費其他 web service,那麼你需要為其他 web service 也建立一個代理。在 web service 引用添加的時候,Visual Studio .NET 就自動為你建立了一個代理。使用 .NET SDK 提供的 WSDL 工具來為 web service 建立代理。它将在目前目錄建立 FirstSevice.cs 檔案。我們需要對其進行編譯來為 web service 建立 FirstService.dll(代理)。相關指令:c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL;c:> csc /t:library FirstService.cs。
  • 将編譯好的代理放到 web service 的虛拟目錄下的 bin 目錄中(c:\MyWebServices\bin)。網際網路資訊服務 IIS 尋找這個目錄中的代理。
  • 同樣建立服務消費者。注意一個 web service 代理對象将在消費者中進行執行個體化。這個代理負責與服務進行互動。
  • 在 IE 中輸入消費者 URL 來測試一下(例如,http://localhost/MyWebServices/WebApp.aspx)。

基于 Windows 應用的 web service 消費者

寫一個基于 Windows 應用的 web service 消費者跟寫其他任何 Windows 應用是一樣的。你需要做的僅僅是建立代理(我們上邊介紹的)并在編譯應用的時候引用這個代理。下面是我們使用 web service 的 Windows 應用。這個應用建立了一個 web service 對象(當然,隻是代理而已)并調用了它的

SayHello 和

Add 方法。

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 service。

現在,問題出現了:你怎麼能確定該應用程式實際上是調用 web service?

驗證其實很簡單。關掉你的 web 伺服器,這樣 web service 就無法連接配接了。然後,執行

WinApp 應用。它将抛一個運作時異常。現在,再啟動 web 伺服器,

WinApp 應用就能正常工作啦。

原文連結: ​​http://www.tutorialspoint.com/webservices/web_services_examples.htm​​