Web服務是一種基於Web的功能,可以使用Web應用程式使用的Web協議進行訪問。Web服務開發有三個方面:
- 創建Web服務
- 創建一個代理
- 使用Web服務
創建一個Web服務
Web服務是一個Web應用程式,它基本上是由其他應用程式可以使用的方法組成的類。它也遵循一個代碼隱藏的體系結構,如ASP.NET網頁,儘管它沒有用戶介面。
為了理解這個概念,創建一個Web服務來提供股票價格資訊。客戶可以根據股票代碼查詢股票的名稱和價格。 為了保持這個例子簡單,股票的資訊被硬編碼在一個二維數組中。 這個Web服務有三種方法:
- 默認的
HelloWorld
方法 GetName
方法用於獲取股票的名稱GetPrice
方法用於獲取股票的價格
按照以下步驟創建Web服務:
第1步: 在Visual Studio中選擇菜單:檔 -> 新建 -> 網站,然後選擇ASP.NET空網站,輸入專案名稱為:WebServices 。
第2步: 在專案上右擊選擇“添加新建專案” ->Web -> Web服務。在專案的App_Code
目錄中創建名為Service.asmx
的Web服務檔及其代碼,檔Service.cs
。
第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://tempuri.org/")]
[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步: 更改檔後面的代碼,為股票代碼,名稱和價格添加字串的二維數組,獲取股票資訊。
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[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服務測試頁面,其允許測試服務方法。如下圖所示 -
第8步: 點擊方法名稱,檢查是否正常運行。例如,點擊:GetName 方法 -
第9步: 要測試GetName
方法,提供一個股票代碼(這裏輸入:JSW
並點擊調用),它是硬編碼的,它返回股票的名稱 -
使用Web服務
要使用Web服務,請在同一解決方案下創建一個Web站點,名稱為:WebServiceCall 。 這可以通過右鍵單擊解決方案資源管理器中的解決方案名稱來完成。 調用Web服務的網頁應該有一個標籤控件來顯示返回的結果和一個用於調用服務的按鈕。
Web應用程式(Default.aspx)的內容檔如下所示:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>WebServices調用示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>使用股票Web服務的示例</h3>
<br /> <br />
<asp:Label ID="lblmessage" runat="server"></asp:Label>
<br /> <br />
<asp:Button ID="btnservice" runat="server" onclick="btnservice_Click" Text="獲得股票資訊" style="width:99px" />
</div>
</form>
</body>
</html>
Web應用程式的檔(Default.aspx.cs)的後端代碼如下所示:
using System;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//this is the proxy
using localhost;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
lblmessage.Text = "第一次加載時間: " + DateTime.Now.ToLongTimeString();
}
else
{
lblmessage.Text = "回傳時間: " + DateTime.Now.ToLongTimeString();
}
}
protected void btnservice_Click(object sender, EventArgs e)
{
StockService proxy = new StockService();
lblmessage.Text = String.Format("當前SATYAM股票的價格:{0}",
proxy.GetPrice("SATYAM").ToString());
}
}
創建代理
代理是Web服務代碼的替代品。在使用Web服務之前,必須創建代理。 代理向客戶端應用程式註冊。然後,客戶端應用程式使用本地方法調用Web服務。
代理接受調用,以適當的格式包裝它,並將其作為SOAP請求發送到伺服器。SOAP代表簡單對象訪問協議。該協議用於交換Web服務數據。
當伺服器將SOAP包返回給客戶端時,代理解碼所有內容並將其呈現給客戶端應用程式。
在使用btnservice_Click
調用Web服務之前,應該將Web引用添加到應用程式中。 這會透明地創建一個代理類,由btnservice_Click
事件使用。
按照以下步驟創建代理:
第1步: 右鍵單擊解決方案資源管理器中的Web應用程式條目,然後單擊添加服務引用,然後選擇高級。
第2步: 選擇“此解決方案中的Web服務”。它返回StockService 引用。
第3步: 點擊服務打開測試網頁。 默認情況下,創建的代理名稱為localhost
,也可以重命名它。點擊“添加引用”將代理添加到客戶端應用程式。
在代碼後面的代碼中加入代理,方法是:
using localhost;
運行WebServiceCall 專案,得到以下結果 -
點擊獲取股票價格 按鈕,得到以下結果 -