评教系统阶段验收,数据上的一个最大的问题,数据不同步。原因就是评教的基本数据完全是从基础数据库中copy过来的,copy的原因是提高数据查询的效率(相比每次查询基础的视图),但是却造成了一个数据两个库,而所有的数据都是以基础为准的,基础的修改了,我们copy过来的还不能修改,只能重新copy。
如何解决效率和数据不同步的问题,组长提出的Web Service,而且八期在做的教务系统也在使用Web Service,能不能解决我们的问题,是不是最好的方法,不太确定,因为之前也只听说过,也好像在某个视频学习中见到过,但是没有用过,那就先从认识开始吧!
一.WebService是什么
WebService是什么,它是一种可以接收从内网或外网上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
从这段话中,我们可以知道是两个系统(多个也可能)之间进行数据交换的技术,更确切说的是为信息的相互通信和共享提供的接口。
三个新名词,SOAP,WSDL,UDDI
SOAP,一种协议,基于XML和HTTP这些标准,(全称:Simple
Object Access Protocal,简单对象访问协议),协议大家都不陌生吧。
WSDL,基于XML的语言,(全称:Web Services DescriptionLanguage,网络服务描述语言),XML格式的语言,下面的例子有说明。
UDDI,一种目录服务,使用它对Web services 进行注册和搜索。
这几个不是这篇博客的重点,想要更多的了解,移驾:SOAP WSDL UDDI
二. 实现Web Service
对Web Service有了一些认识,最想知道的就是怎么去实现它,好吧,下面就用编程世界中无人不知无人不晓的Hello world为例吧。
1. 创建Web Service
首先,VS2012中新建一个解决方法,并添加新项:Web服务。
下面是在默认代码基础上添加了一个Test方法的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace WebService { /// <summary> /// WebService1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod(Description = "参数")] public string Test(string parameter) { return parameter; } } }
运行:可以看到两个方法,HelloWorld和新添加的Test方法,以及其它的信息。(这个页面可以看作是上面代码的可视化。地址:http://localhost:8091/WebService1.asmx,后面会用到)
Web Service提供以下三个属性。
Namespace:此属性的值包含 XML Web Service的默认命名空间。XML命名空间提供了一种在XML文档中创建名称的方法,该名称可由统一资源标识符(URI)标识。如果不指定命名空间,则使用默认命名空间http://tempuri.org/。
Name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称。
Description:此属性的值包含描述性消息,此消息将在XML Web Service的说明文件(例如服务说明和服务帮助页)生成后显示给XML Web Service的潜在用户。
点开两个方法:(此页面可以看作是方法的可视化,包括了方法名,参数,以及说明)
HelloWorld()方法:
调用:Test()方法:这里的参数值我们随便写,看看它的调用输出:
调用:
从上面的输出结果,我们可以看到,输出结果是XML文档的格式
到这Web Service创建,运行,其实并不复杂,它也就是一个接口,创建好后,去调用就可以了。下面就来新建一个解决方案来实现调用。
2. 调用Web Service
新建另一个新解决方案(Asp.NET)
(1).添加服务引用
地址是第一个解决方案Web Service运行后的地址,也可以是网站发布后的Web Service访问地址。
(2).添加一个Web 窗体,如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WStest.WebForm1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txtName" runat="server"></asp:TextBox> <asp:Button ID="btnTest" runat="server" Text="Test" /> </div> </form> </body> </html>
(3).后台实现:
btnTest的方法
protected void btnTest_Click(object sender, EventArgs e) { string name = txtName.Text; //ServiceReference1添加Web Service引用的命名空间(上图所示) ServiceReference1.WebServiceSoapClient web = new ServiceReference1.WebServiceSoapClient(); Response.Write((web.HelloWorld()).ToString()); Response.Write((web.Test(name)).ToString()); }
(4).运行程序
如图所示,Web Service调用成功。
三. 总结
WebService的简单认识和实例,仅仅是WebService的开始,WebService的实际的应用还需要根据实际的项目需求,下次把WebService运用到三层结构中,根据实际项目需求再来学习,一步步深入,循序渐进。
更详细的用处请看:什么时候使用WebService