Xml WebService笔记(二)
上文介绍了webService,也讲了这个需求,本文就开始构筑代码了。
首先,在实现代码前我们先看看webService如何新建,含有些什么东西(我用是VS2010版本,C#语言)
在VS2010中,开发一个webservice并不是件困难的事,首先,我们新建一个webservice项目(文件->新建->项目->C#->Web服务应用程序)
建完这个工程,我们将看到一个叫Service.asmx的文件,这就是webservice的标准文件,它也有UI的概念,不过我们一般不关注,因此,我们查看其cs代码文件, 将看见一个helloworld的WebMethod(如果有注释的话,去掉注释运行就好了),直接运行项目,你就可以得到最简单的webservice运行实例了.点击"helloworld"将执行其方法.运行这
个程序后,就是 一个简单的webService(在运行后,请注意浏览器地址栏的地址,这个地址在后面还会用到)。

看了上面,具体介绍webservice的写法.在代码文件里,如果我们写了一个函数后,希望此函数成为外部可调用的接口函数,我们必须在函数上面添上一行代码[WebMethod(Description="函数的描述信息")],如果你的函数没有这个申明,它将不能被用户引用.如:
[WebMethod(Description="最简单的方法")]
public string HelloWorld()
{
return "Hello World";
}
这个函数就是外部可调用的接口函数,对用户来说相当于一个API.如果某用户在引用了这个服务后,他调用HelloWorld()方法,他就将获得"HelloWorld"这个返回值.
看到这里,我们是不是发现,其实webservice并不是那么的神秘,它也不过只是个接口,对我们而言,侧重点依然是接口函数的编写.下面,我将给出我们的例子所需要的接口函数.
明白了webService的新建后,我们来开始我们的代码工作(针对这个新建部分还有疑问的,可以参考博客园另一个博主的http://www.cnblogs.com/nianyuwen/archive/2012/05/15/2500932.html,是很好的基础学习资料,明白易懂,感谢该博主的分享)
现在我们来看一下这个系统B提供的webService接口函数
using System.Web.Services;
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Xml;
using System.Data;
using System.Configuration;
[WebService(Namespace = "http://maih.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
//[WebMethod]
//public string HelloWorld()
// {
// return "Hello World";
//}
//这个是连接数据库的字符串(提醒:这个连接数据库的地方一般是在你自己项目内部配置文件中,这里做成调用你项目内部函数来获取连接,不要在这里直接写,是为了
//说明拿出来放在这里,因为刚初学的人估计不清楚如何连接数据库等)
public string Conn()
{
string strCon = @"data source=.;uid=sa;pwd=sa123;database=webServ_test";//打开连接
return strCon;
}
[WebMethod(Description = "数据查询")]//这里如果去掉,外部将不能调用这个方法
public XmlDataDocument GetSiteAData()
{
//连接数据库的操作
string conStr = Conn();
SqlConnection conn = new SqlConnection(conStr);
conn.Open();
string sql = "select id,stuName,Sex,age,tel from Test_A";
SqlDataAdapter myCommand = new SqlDataAdapter(sql, conn); //执行查询语句 用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接
XmlDataDocument xd = new XmlDataDocument(); //XmlDataDocument允许通过相关的 DataSet 存储、检索和操作结构化数据,可以加载关系数据或 XML 数据
DataSet ds = new DataSet();
myCommand.Fill(ds);
if ((int)ds.Tables[0].DefaultView.Count < 1)//ds.Tables[0].Count也是可行的,DefaultView也可不用写,写了意思就是第一个表的视图。其区别可以网上查资料参考
{
string xml = "<NewDataSet></NewDataSet>";
xd.LoadXml(xml); //从指定的字符串加载 XML 文档
return xd;
}
//下面的代码将dataset转化为XmlDataDocument
xd = new XmlDataDocument(ds);
XmlNode root1 = xd.DocumentElement;
XmlNodeList roots = root1.SelectNodes("list");
foreach (XmlNode roota in roots) //为所有元素加上站点名称标记
{
XmlElement Link = xd.CreateElement("SiteName");
Link.InnerText = ConfigurationSettings.AppSettings["SiteName"].ToString();
roota.AppendChild(Link);
}
return xd;
}
}
这样系统B就提供了一个接口函数,代码是一个比较简单的测试代码,对代码片段的做了一些解释,如果还有看不明白的朋友,可以网上搜索你不明白的点,去看看具体的意思,运用等等,完成后运行效果如图,就会看到GetSiteAData,点击这个函数然后再点击调用就可以看到数据:



这个函数的返回类型是个xml的文档.在上文说过,webservice只能传输序列化数据,xml显然满足条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,其他的可传输形式的有兴趣的可以去研究一下,包括带参数请求的情况.
到此呢,提供给别人的接口基本完成(这里只是简单的说说这个实现,具体细节,优化都不做了),下一节我们开始讲解如何调用获取到这个数据。
浙公网安备 33010602011771号