评教系统阶段验收,数据上的一个最大的问题,数据不同步。原因就是评教的基本数据完全是从基础数据库中copy过来的,copy的原因是提高数据查询的效率(相比每次查询基础的视图),但是却造成了一个数据两个库,而所有的数据都是以基础为准的,基础的修改了,我们copy过来的还不能修改,只能重新copy。
如何解决效率和数据不同步的问题,组长提出的Web Service,而且八期在做的教务系统也在使用Web Service,能不能解决我们的问题,是不是最好的方法,不太确定,因为之前也只听说过,也好像在某个视频学习中见到过,但是没有用过,那就先从认识开始吧!
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为例吧。
首先,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创建,运行,其实并不复杂,它也就是一个接口,创建好后,去调用就可以了。下面就来新建一个解决方案来实现调用。
新建另一个新解决方案(Asp.NET)
地址是第一个解决方案Web Service运行后的地址,也可以是网站发布后的Web Service访问地址。
<%@ 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>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());
}
如图所示,Web Service调用成功。
WebService的简单认识和实例,仅仅是WebService的开始,WebService的实际的应用还需要根据实际的项目需求,下次把WebService运用到三层结构中,根据实际项目需求再来学习,一步步深入,循序渐进。
更详细的用处请看:什么时候使用WebService
Web Service (一) :Hello World,布布扣,bubuko.com
原文:http://blog.csdn.net/akkzhjj/article/details/22898195