Web服務(wù)是一種基于Web的功能,可以使用Web應(yīng)用程序使用的Web協(xié)議進(jìn)行訪問。Web服務(wù)開發(fā)有三個(gè)方面:
Web服務(wù)是一個(gè)Web應(yīng)用程序,它基本上是由其他應(yīng)用程序可以使用的方法組成的類。它也遵循一個(gè)代碼隱藏的體系結(jié)構(gòu),如ASP.NET網(wǎng)頁(yè),盡管它沒有用戶界面。
為了理解這個(gè)概念,創(chuàng)建一個(gè)Web服務(wù)來提供股票價(jià)格信息。客戶可以根據(jù)股票代碼查詢股票的名稱和價(jià)格。 為了保持這個(gè)例子簡(jiǎn)單,股票的信息被硬編碼在一個(gè)二維數(shù)組中。 這個(gè)Web服務(wù)有三種方法:
HelloWorld
方法GetName
方法用于獲取股票的名稱GetPrice
方法用于獲取股票的價(jià)格按照以下步驟創(chuàng)建Web服務(wù):
第1步: 在Visual Studio中選擇菜單:文件 -> 新建 -> 網(wǎng)站,然后選擇ASP.NET空網(wǎng)站,輸入項(xiàng)目名稱為:WebServices 。
第2步: 在項(xiàng)目上右擊選擇“添加新建項(xiàng)目” ->Web -> Web服務(wù)。在項(xiàng)目的App_Code
目錄中創(chuàng)建名為Service.asmx
的Web服務(wù)文件及其代碼,文件Service.cs
。
第3步: 將上面兩個(gè)文件的名稱更改為StockService.asmx
和StockService.cs
。
第4步: .asmx
文件只有一個(gè)WebService
指令:
<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>
第5步: 打開StockService.cs
文件,其中生成的代碼是基本的Hello World
服務(wù)。 默認(rèn)的Web服務(wù)代碼隱藏文件如下所示:
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步: 更改文件后面的代碼,為股票代碼,名稱和價(jià)格添加字符串的二維數(shù)組,獲取股票信息。
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步: 運(yùn)行Web服務(wù)應(yīng)用程序給出Web服務(wù)測(cè)試頁(yè)面,其允許測(cè)試服務(wù)方法。如下圖所示 -
第8步: 點(diǎn)擊方法名稱,檢查是否正常運(yùn)行。例如,點(diǎn)擊:GetName 方法 -
第9步: 要測(cè)試GetName
方法,提供一個(gè)股票代碼(這里輸入:JSW
并點(diǎn)擊調(diào)用),它是硬編碼的,它返回股票的名稱 -
要使用Web服務(wù),請(qǐng)?jiān)谕唤鉀Q方案下創(chuàng)建一個(gè)Web站點(diǎn),名稱為:WebServiceCall 。 這可以通過右鍵單擊解決方案資源管理器中的解決方案名稱來完成。 調(diào)用Web服務(wù)的網(wǎng)頁(yè)應(yīng)該有一個(gè)標(biāo)簽控件來顯示返回的結(jié)果和一個(gè)用于調(diào)用服務(wù)的按鈕。
Web應(yīng)用程序(Default.aspx)的內(nèi)容文件如下所示:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>WebServices調(diào)用示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>使用股票Web服務(wù)的示例</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應(yīng)用程序的文件(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 = "第一次加載時(shí)間: " + DateTime.Now.ToLongTimeString();
}
else
{
lblmessage.Text = "回傳時(shí)間: " + DateTime.Now.ToLongTimeString();
}
}
protected void btnservice_Click(object sender, EventArgs e)
{
StockService proxy = new StockService();
lblmessage.Text = String.Format("當(dāng)前SATYAM股票的價(jià)格:{0}",
proxy.GetPrice("SATYAM").ToString());
}
}
代理是Web服務(wù)代碼的替代品。在使用Web服務(wù)之前,必須創(chuàng)建代理。 代理向客戶端應(yīng)用程序注冊(cè)。然后,客戶端應(yīng)用程序使用本地方法調(diào)用Web服務(wù)。
代理接受調(diào)用,以適當(dāng)?shù)母袷桨b它,并將其作為SOAP請(qǐng)求發(fā)送到服務(wù)器。SOAP代表簡(jiǎn)單對(duì)象訪問協(xié)議。該協(xié)議用于交換Web服務(wù)數(shù)據(jù)。
當(dāng)服務(wù)器將SOAP包返回給客戶端時(shí),代理解碼所有內(nèi)容并將其呈現(xiàn)給客戶端應(yīng)用程序。
在使用btnservice_Click
調(diào)用Web服務(wù)之前,應(yīng)該將Web引用添加到應(yīng)用程序中。 這會(huì)透明地創(chuàng)建一個(gè)代理類,由btnservice_Click
事件使用。
按照以下步驟創(chuàng)建代理:
第1步: 右鍵單擊解決方案資源管理器中的Web應(yīng)用程序條目,然后單擊添加服務(wù)引用,然后選擇高級(jí)。
第2步: 選擇“此解決方案中的Web服務(wù)”。它返回StockService 引用。
第3步: 點(diǎn)擊服務(wù)打開測(cè)試網(wǎng)頁(yè)。 默認(rèn)情況下,創(chuàng)建的代理名稱為localhost
,也可以重命名它。點(diǎn)擊“添加引用”將代理添加到客戶端應(yīng)用程序。
在代碼后面的代碼中加入代理,方法是:
using localhost;
運(yùn)行WebServiceCall 項(xiàng)目,得到以下結(jié)果 -
點(diǎn)擊獲取股票價(jià)格 按鈕,得到以下結(jié)果 -