鍍金池/ 教程/ C#/ ASP.NET Web Services
ASP.NET調(diào)試
ASP.NET Web Services
ASP.NET緩存
ASP.NET多線程
ASP.NET面板控件
ASP.NET數(shù)據(jù)綁定
ASP.NET數(shù)據(jù)源
ASP.NET個(gè)性化
ASP.Net教程
ASP.NET Ajax控件
ASP.NET生命周期
ASP.NET HTML服務(wù)器
ASP.NET簡(jiǎn)介
ASP.NET驗(yàn)證器
ASP.NET多視圖
ASP.NET網(wǎng)站配置
ASP.NET錯(cuò)誤管理
ASP.NET自定義控件
ASP.NET LINQ
ASP.NET AdRotator控件
ASP.NET客戶端
ASP.NET文件上傳
ASP.NET服務(wù)器控件
ASP.NET開發(fā)環(huán)境配置
ASP.NET管理狀態(tài)
ASP.NET服務(wù)端
ASP.NET數(shù)據(jù)庫(kù)訪問(Access)
ASP.NET基本控件
ASP.NET安全
ASP.NET指令
ASP.NET事件處理
ASP.NET第一個(gè)程序
ASP.NET日歷控件

ASP.NET Web Services

Web服務(wù)是一種基于Web的功能,可以使用Web應(yīng)用程序使用的Web協(xié)議進(jìn)行訪問。Web服務(wù)開發(fā)有三個(gè)方面:

  • 創(chuàng)建Web服務(wù)
  • 創(chuàng)建一個(gè)代理
  • 使用Web服務(wù)

創(chuàng)建一個(gè)Web服務(wù)

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ù)有三種方法:

  • 默認(rèn)的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.asmxStockService.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ù)

要使用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());
    }
}

創(chuàng)建代理

代理是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é)果 -


上一篇:ASP.NET多視圖下一篇:ASP.NET Ajax控件