📅  最后修改于: 2020-11-21 05:57:08             🧑  作者: Mango
Web服务是一种基于Web的功能,使用要由Web应用程序使用的Web协议访问。 Web服务开发涉及三个方面:
Web服务是一个Web应用程序,它基本上是一类由其他应用程序可以使用的方法组成的类。尽管它没有用户界面,但它也遵循诸如ASP.NET网页之类的代码隐藏体系结构。
为了理解这个概念,让我们创建一个提供股票价格信息的Web服务。客户可以根据股票代码查询股票的名称和价格。为使此示例简单,将值硬编码在二维数组中。该Web服务具有三种方法:
采取以下步骤来创建Web服务:
步骤(1) :在Visual Studio中选择“文件”->“新建”->“网站”,然后选择“ ASP.NET Web服务”。
步骤(2) :在项目的App_Code目录中创建一个名为Service.asmx的Web服务文件及其背后的代码Service.cs。
步骤(3) :将文件名更改为StockService.asmx和StockService.cs。
步骤(4) :.asmx文件上仅具有一个WebService指令:
步骤(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 description for Service1
//
[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) :更改文件后面的代码,以添加用于股票代码,名称和价格的二维字符串数组以及用于获取股票信息的两种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)]
// 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服务的网页应具有标签控件以显示返回的结果,并具有两个按钮控件,一个用于回发,另一个用于调用该服务。
Web应用程序的内容文件如下:
Untitled Page
该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参考”。
步骤(2) :选择“此解决方案中的Web服务”。它返回StockService参考。
步骤(3) :点击服务即可打开测试网页。默认情况下,创建的代理称为“ localhost”,您可以重命名。单击“添加引用”以将代理添加到客户端应用程序。
通过添加以下内容,将代理包括在文件后面的代码中:
using localhost;