ASP.NET Web Services
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 項目,得到以下結果 -
點擊獲取股票價格 按鈕,得到以下結果 -
易百教程移動端:請掃描本頁面底部(右側)二維碼並關注微信公衆號,回覆:"教程" 選擇相關教程閱讀或直接訪問:http://m.yiibai.com 。
上一篇:ASP.NET緩存 下一篇:ASP.NET多線程
加QQ羣啦,易百教程官方技術學習羣
QQ羣名稱
羣號
人數
免費
等級
羣介紹
JAVA技術
227270512
2000
否
LV5
Java基礎,JSP(Servlet),JAVA框架,Java高併發架構,Maven等等
MySQL/SQL
418407075
2000
否
LV5
SQL基礎,MySQL基礎,MySQL存儲過程,視圖,觸發器等等
大數據開發
655154550
2000
否
LV5
Spark,zookeeper,kafka,CDH,hive,fulme,hbase等Hadoop雲計算生態圈技術
Python技術
287904175
2000
否
LV5
Python編程,Python Web,Python大數據,Python爬蟲,自然語言處理等
Linux技術
479429477
2000
是
LV1
Redhat/Centos,Ubuntu,Shell,運維,監控等技術
PHP/Web開發者
460153241
1000
是
LV0
PHP基礎,PHP高級,網站優化/架構,JS,HTML,JQuery,前端等Web開發技術
人工智能
456236082
1000
是
LV0
人工智能,深度學習,算法等技術
Oracle數據庫
175248146
1000
是
LV0
SQL基礎,Oracle基礎,Oracle存儲過程,視圖,觸發器等等
Android開發
159629185
1000
是
LV0
Android開發,Android Studio,Kotlin,Dagger等技術
微軟技術
579821706
1000
是
LV0
C#,ASP.Net,VB.Net,ADO.Net,SQL Server,VBA,Excel等技術
測試工程師
415553199
1000
是
LV0
軟件測試,硬件測試,測試平臺開發,黑白盒測試,Labview,C/C++, Java/.net; 軟件開發,遊戲開發等技術