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.asmxStockService.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服務測試頁面,其允許測試服務方法。如下圖所示 -

ASP.NET

第8步: 點擊方法名稱,檢查是否正常運行。例如,點擊:GetName 方法 -

ASP.NET

第9步: 要測試GetName方法,提供一個股票代碼(這裏輸入:JSW並點擊調用),它是硬編碼的,它返回股票的名稱 -

ASP.NET

使用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 引用。

ASP.NET

第3步: 點擊服務打開測試網頁。 默認情況下,創建的代理名稱爲localhost,也可以重命名它。點擊「添加引用」將代理添加到客戶端應用程序。

在代碼後面的代碼中加入代理,方法是:

using localhost;

運行WebServiceCall 項目,得到以下結果 -

ASP.NET

點擊獲取股票價格 按鈕,得到以下結果 -

ASP.NET

易百教程移動端:請掃描本頁面底部(右側)二維碼並關注微信公衆號,回覆:"教程" 選擇相關教程閱讀或直接訪問: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; 軟件開發,遊戲開發等技術