ASP.NET - Web 服务

Web 服务是一种基于 Web 的功能,使用 Web 应用程序使用的 Web 协议进行访问。 Web服务开发包括三个方面:

  • 创建 Web 服务
  • 创建代理
  • 使用 Web 服务

创建 Web 服务

Web 服务是一个 Web 应用程序,它基本上是一个由其他应用程序可以使用的方法组成的类。 尽管它没有用户界面,但它也遵循代码隐藏架构,例如 ASP.NET 网页。

为了理解这个概念,让我们创建一个 Web 服务来提供股票价格信息。 客户可以根据股票代码查询股票的名称和价格。 为了使这个示例简单,这些值被硬编码在二维数组中。 该 Web 服务具有三种方法:

  • 默认的 HelloWorld 方法
  • GetName 方法
  • GetPrice 方法

按照以下步骤创建 Web 服务:

步骤 (1) : 在 Visual Studio 中选择 File -> New -> Web Site,然后选择 ASP.NET Web 服务。

步骤 (2) : 在项目的 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)]

   

   // 要允许从脚本调用此 Web 服务,

   // 使用 ASP.NET AJAX,取消注释以下行。

   // [System.Web.Script.Services.ScriptService]

   

   public class Service1 : System.Web.Services.WebService

   {

      [WebMethod]

      

      public string HelloWorld()

      {

         return "Hello World";

      }

   }

}

步骤 (6) : 更改文件后面的代码以添加股票代码、名称和价格的二维字符串数组以及用于获取股票信息的两个 Web 方法。


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)]



// 要允许从脚本调用此 Web 服务,

// 使用 ASP.NET AJAX,取消注释以下行。

// [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) : 单击方法名称,检查其是否正常运行。

获取名称

步骤 (9) : 为了测试 GetName 方法,请提供股票代码之一,该代码是硬编码的,它返回股票的名称

股票名称

使用 Web 服务

要使用 Web 服务,请在同一解决方案下创建一个网站。 这可以通过右键单击解决方案资源管理器中的解决方案名称来完成。 调用Web服务的网页应该有一个标签控件来显示返回的结果和两个按钮控件,一个用于回发,另一个用于调用服务。

Web 应用程序的内容文件如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml" >



   <head runat="server">

      <title>

         Untitled Page

      </title>

   </head>

   

   <body>

   

      <form id="form1" runat="server">

         <div>

         

            <h3>Using the Stock Service</h3>

            

            <br /> <br />

            

            <asp:Label ID="lblmessage" runat="server"></asp:Label>

            

            <br /> <br />

            

            <asp:Button ID="btnpostback" runat="server" onclick="Button1_Click" Text="Post Back" style="width:132px" />

               

            <asp:Button ID="btnservice" runat="server" onclick="btnservice_Click"  Text="Get Stock" style="width:99px" />

            

         </div>

      </form>

      

   </body>

</html>

Web 应用程序的隐藏文件代码如下:


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;



namespace wsclient

{

   public partial class _Default : System.Web.UI.Page

   {

      protected void Page_Load(object sender, EventArgs e)

      {

         if (!IsPostBack)

         {

            lblmessage.Text = "First Loading Time: " +  DateTime.Now.ToLongTimeString

         }

         else

         {

            lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString();

         }

      }

      

      protected void btnservice_Click(object sender, EventArgs e)

      {

         StockService proxy = new StockService();

         lblmessage.Text = String.Format("Current SATYAM Price:{0}",

         proxy.GetPrice("SATYAM").ToString());

      }

   }

}

创建代理

代理是 Web 服务代码的替代。 在使用Web服务之前,必须创建代理。 代理已向客户端应用程序注册。 然后,客户端应用程序像使用本地方法一样调用 Web 服务。

代理接受调用,以正确的格式包装它,并将其作为 SOAP 请求发送到服务器。 SOAP 代表简单对象访问协议。 该协议用于交换Web服务数据。

当服务器将 SOAP 包返回给客户端时,代理会解码所有内容并将其呈现给客户端应用程序。

在使用 btnservice_Click 调用 Web 服务之前,应将 Web 引用添加到应用程序中。 这会透明地创建一个代理类,供 btnservice_Click 事件使用。


protected void btnservice_Click(object sender, EventArgs e)

{

   StockService proxy = new StockService();

   lblmessage.Text = String.Format("Current SATYAM Price: {0}", 

   proxy.GetPrice("SATYAM").ToString());

}

执行以下步骤来创建代理:

步骤 (1) : 右键单击解决方案资源管理器中的 Web 应用程序条目,然后单击"添加 Web 引用"。

添加 Web 引用

步骤 (2) : 选择"此解决方案中的 Web 服务"。 它返回 StockService 引用。

选择 Web 服务

步骤 (3) : 单击该服务将打开测试网页。 默认情况下创建的代理名为"localhost",您可以重命名它。 单击"添加引用"将代理添加到客户端应用程序。

股票服务2

通过添加以下内容将代理包含在代码隐藏文件中:


 using localhost;



关于我们 | 隐私条款 | 学习路线
返回顶部