ASP.NET 网络服务


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 Service。

步骤 (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
{
    // <总结>
    // Service1 的摘要描述
    // <总结>
   
    [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 () {
        // 如果使用设计的组件,请取消注释以下内容
        // 初始化组件();
    }
   
    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)
    {
        // 它将交易品种作为参数并返回价格
        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)
    {
        // 它将符号作为参数和
        // 返回股票名称
        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 服务测试页面,允许测试服务方法。

Stock Service

步骤 (8) :点击方法名,查看是否运行正常。

Get Name

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

the name of the stock

使用 Web 服务


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

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

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

<!DOCTYPE html PUBLIC "-// W3C

<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;

// 这是代理
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 引用”。

Add Web Reference

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

Select Web Services

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

Stock Service 2

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

 using localhost;