ASP.NET 网络服务
网络服务是使用网络协议访问的基于网络的功能,以供网络应用程序使用。 Web 服务开发的三个方面:
创建网络服务
创建代理
使用网络服务
创建网络服务
Web 服务是一个 Web 应用程序,它基本上是一个由其他应用程序可以使用的方法组成的类。它还遵循代码隐藏架构,例如 ASP.NET 网页,尽管它没有用户界面。
为了理解这个概念,让我们创建一个网络服务来提供股票价格信息。客户可以根据股票代码查询股票的名称和价格。为了让这个例子简单,这些值被硬编码在一个二维数组中。此 Web 服务具有三种方法:
HelloWorld 方法
GetName 方法
GetPrice 方法
按照以下步骤创建网络服务:
步骤(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
{
// <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";
}
}
}
Step (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):点击方法名,检查是否正常运行。
步骤 (9):为了测试 GetName 方法,提供硬编码的股票代码之一,它返回股票名称
使用网络服务
要使用网络服务,请在相同的解决方案下创建一个网站。这可以通过右键单击解决方案资源管理器中的解决方案名称来完成。调用 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 服务。
代理接收调用,以适当的格式包装它,并将其作为 SOAP 请求发送到服务器。 SOAP 代表简单对象访问协议。该协议用于交换网络服务数据。
当服务器将 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 引用"。
步骤 (2):选择"此解决方案中的 Web 服务"。它返回 StockService 引用。
步骤 (3):点击服务打开测试网页。默认情况下,创建的代理名为"localhost",您可以重命名它。单击"添加引用"以将代理添加到客户端应用程序。
通过添加将代理包含在代码隐藏文件中: