• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

宇孤行

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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使用最为广泛,而且考虑到跨平台应用,其他的可传输形式的有兴趣的可以去研究一下,包括带参数请求的情况.

        到此呢,提供给别人的接口基本完成(这里只是简单的说说这个实现,具体细节,优化都不做了),下一节我们开始讲解如何调用获取到这个数据。

posted on 2013-12-26 17:40  宇孤行  阅读(154)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3