Web 服務
Web 服務是一個基于網絡的功能,可被 web 應用通過 web 網絡協議獲取。web 服務開發主要包含以下三方面:
- 創建 web 服務
- 創建代理服務器
- 使用 web 服務
創建 web 服務
一個 web 服務就是一個 web 應用,基本形式為一個類包含可以被其他應用調用的多個方法,它也采用隱藏代碼結構例如 ASP.NET 網頁,但它不存在用戶接口。
為了更好地理解這個概念讓我們創建一個提供股票價格信息的 web 服務。該服務的客戶端可以通過股票的標簽查詢相關的名字和價格。為了簡化這個例子,我們設置股票價格為固定值,保存在一個二維列表中。這個 web 服務包含三個方法:
- 一個默認的 HelloWorld 方法
- 一個 GetName 方法
- 一個 GetPrice 方法
采取以下步驟創建該服務:
步驟 (1) : 在 Visual Studio 中選擇 File -> New -> Web Site,然后選擇 ASP.NET Web Service。
步驟 (2) : 一個名為 Service.asmx 的 web 服務文件和它的代碼被隱藏,Service.cs 會在這個工程的 App_Code 路徑下被創建。
步驟 (3) : 將文件名修改為 StockService.asmx 和 StockService.cs。
步驟 (4) : .asmx 文件簡化了一個 WebService 指令如下:
<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>步驟 (5) : 打開 StockService.cs 文件,在該文件里生成的代碼是 Hello World 服務的基礎代碼。默認的 web 服務代碼如下:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace StockService { // <summary> // Summary description for Service1 // <summary> [WebService(Namespace = "http://www.jfrwli.cn/uploads/allimg/xezyyhch0rk [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } } }步驟 (6) : 修改文件內的代碼增加一個存儲了各股票標簽,名稱和價格的字符串的二維指針,并編寫獲取股票信息的兩個 web 方法如下;
using System; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; [WebService(Namespace = "http://www.jfrwli.cn/uploads/allimg/xezyyhch0rk [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class StockService : System.Web.Services.WebService { public StockService () { //Uncomment the following if using designed components //InitializeComponent(); } string[,] stocks = { {"RELIND", "Reliance Industries", "1060.15"}, {"ICICI", "ICICI Bank", "911.55"}, {"JSW", "JSW Steel", "1201.25"}, {"WIPRO", "Wipro Limited", "1194.65"}, {"SATYAM", "Satyam Computers", "91.10"} }; [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public double GetPrice(string symbol) { //it takes the symbol as parameter and returns price for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return Convert.ToDouble(stocks[i, 2]); } return 0; } [WebMethod] public string GetName(string symbol) { // It takes the symbol as parameter and // returns name of the stock for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return stocks[i, 1]; } return "Stock Not Found"; } }步驟 (7) : 運行 web 服務應用給出了一個 web 服務測試頁面,我們可以在該頁面測試服務方法。
web 應用的代碼如下:
創建代理服務器
代理服務器指的是一個 web 服務代碼的代替者。在使用 web 服務之前,我們必須創建一個代理服務器。這個代理服務器是由客戶端應用注冊的。然后客戶端應用實現調用 web 服務使之像在使用一個本地方法一樣。
該代理服務器將調用,并用適當的格式將調用像發送 SOAP 請求一樣發送到服務器。SOAP 支持簡單對象訪問協議(Simple Object Access Protocol)。該協議適用于 web 服務數據交換。
當此服務器響應并返回一個 SOAP 包給客戶端時,代理服務器將一切呈現給客戶端應用程序。
使用 btnservice_click 調用 Web 服務之前,Web 應用應該被添加到應用程序。這將透明地創建一個代理類,可由 btnservice_click 事件使用。
protected void btnservice_Click(object sender, EventArgs e) { StockService proxy = new StockService(); lblmessage.Text = String.Format("Current SATYAM Price: {0}", proxy.GetPrice("SATYAM").ToString()); }采取以下步驟創建代理:
步驟 (1) : 在解決方案管理器(SolutionExplorer)的 web 應用入口處右擊選擇 ‘Add Web Reference’。
在代碼中加入以下語句使之包含該代理:
using localhost;