webservice实例(二)

 
webservice 实例 ( )
qq 群: 19877329
By: jfan 2007-07-23
上篇文章介绍了些 webservice 的基本特性和我们例子的结构 , 这篇文章我们将开始具体的代码编写工作 .
      这个专题主要讲述的是 webservice, 因此这里我们的代码以 Webservice 相关为主 , 而其他工程 , 例如 :usewebservice 只作简略介绍 .
      VS2005 , 开发一个 webservice 并不是件困难的事 , 首先 , 我们新建一个 webservice 项目 ( 文件 -> 新建 -> 网站 ->ASP.NET WEB 服务 )
      建完这个工程 , 我们将看到一个叫 Service.asmx 的文件 , 这就是 webservice 的标准文件 , 它也有 UI 的概念 , 不过我们一般不关注 , 因此 , 我们查看其 cs 代码文件 . 如果你什么都还没做的话 , 将看见一个被注释掉的 helloworld WebMethod, 把注释去掉 , 在运行 , 你就可以得到最简单的 webservice 运行实例了 . 点击 "helloworld" 将执行其方法 . 显然 , 这个函数对我们的意义只在于宏观的了解了下 web 服务的写法 .
      下面 , 我们将开始具体介绍 webservice 的写法 . 在代码文件里 , 如果我们写了一个函数后 , 希望此函数成为外部可调用的接口函数 , 我们必须在函数上面添上一行代码 [WebMethod(Description=" 函数的描述信息 ")], 如果你的函数没有这个申明 , 它将不能被用户引用 . :
[WebMethod(Description=" 最简单的方法 ")]
  public string HelloWorld()
  {
   return "Hello World";
  }
      这个函数就是外部可调用的接口函数 , 对用户来说相当于一个 API . 如果某用户在引用了这个服务后 , 他调用 HelloWorld() 方法 , 他就将获得 "HelloWorld" 这个返回值 .
API (Application Programming Interface)
所谓 API 本来是为 C C++ 程序员写的。 API 说来说去,就是一种函数,他们包含在一个附加名为 DLL 的动态连接库文件中。用标准的定义来讲, API 就是 Windows 32 位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在 Windows95 Windows NT 操作系统上的应用程序。
       看到这里 , 我们是不是发现 , 其实 webservice 并不是那么的神秘 , 它也不过只是个接口 , 对我们而言 , 侧重点依然是接口函数的编写 . 下面 , 我将给出我们的例子所需要的接口函数 .
public class Service : System.Web.Services.WebService
{
AdoNetCon anc = new AdoNetCon(ConfigurationSettings.AppSettings["ZWOAConnectionString"]);
// 这是我写的一个类,用来操作数据库
    public Service () {
        // 如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }
 
    [WebMethod(Description="hello method")]
    public string HelloWorld() {
        return "Hello World";
    }
 
    [WebMethod(Description = " 获取需要的信息" )]
    public XmlDataDocument GetSiteAData()
    {
        DataSet ds = new DataSet();
        try
        {
            ds = anc.RunProc("select car_id,car_chePai,car_trademark from [zw_db].[dbo].tb_car",ds);
            XmlDataDocument xd = new XmlDataDocument(ds);
            return xd;
        }
        catch
        {
            //System.Web.HttpContext.Current.Response.Write("Error!");
            return null;
        }
    }
 
    [WebMethod(Description = " 查询获取需要的信息" )]
    public XmlDataDocument getCar(string car_id,string car_chePai)
    {
        DataSet ds = new DataSet();
        try
        {
            string sql;
            sql = "select car_id,car_chePai,car_trademark from [zw_db].[dbo].tb_car where 1=1";
            if ((car_id == null) || (car_id.Length == 0))
                ;
            else
                sql = sql +" and car_id =" + "'" + car_id + "'";
            if ((car_chePai == null) || (car_chePai.Length == 0))
                ;
            else
                sql = sql + " and car_chePai like " + "'%" + car_chePai + "%'";
            ds = anc.RunProc(sql, ds);
            XmlDataDocument xd = new XmlDataDocument(ds);
            return xd;
        }
        catch
        {
            //System.Web.HttpContext.Current.Response.Write("Error!");
            return null;
        }
    }
 
    [WebMethod(Description = "insert")]
    public bool addCar(string car_chePai)
    {
        try
        {
            string sql;
            sql = "insert into [zw_db].[dbo].tb_car(car_chePai) values(" + "'" + car_chePai + "'" + ")";
            if ((car_chePai == null) || (car_chePai.Length == 0))
                return false;
            else
            {
                anc.RunProc(sql);
                return true;
            }
        }
        catch
        {
            //System.Web.HttpContext.Current.Response.Write("Error!");
            return false;
        }
    }
 
}
这是获取资源站点信息的一个接口函数 . 里面大部分的代码 , 我想对于有一定 asp.net 基础的朋友来说 , 都应该是一看就明白。
细心的朋友可能会发现这个函数的返回类型似乎比较特殊 , 是个 xml 的文档 . 我们在前面已经说过 ,webservice 只能传输序列化数据 ,xml 显然满足条件 , 但比如 hash 表之类的非序列化数据 , 是不能传输的 ,xml 使用最为广泛 , 而且考虑到跨平台应用 , 所以这里我们只以 xml 数据的传输来示例 .
我们先简单解释下 GetSiteAData() 函数 .
       函数功能很简单 , 只是要返回查询结果 , 其数据格式是 XmlDataDocument. 当查询失败时 ( 无匹配查询结果 ) ,返回一个空记录 . 否则 , 我们把查询后的 dataset 生成一个 XmlDataDocument, 接下来 , 由于该项目的需要 , 我加入了一个循环 , 添加 dataset 里所没有的节点 , 站点名称 . 在这之后 , 算是完成了一个符合我们期望格式的 xml 数据文档 , 我们把它返回 .
        好了 ,webservice 的方法函数介绍完了 ( 这里还有个 web 服务方法 , 稍后介绍 ), 接下来我们的任务是怎么调用它了 . 首先把 webservice 的项目编译完成 , 假定我们这个服务是针对资源站点 A , 我们不妨称其为 ServiceA. 先单独运行 asmx 文件 , 执行 GetSiteAData() 方法 , 将提示你输入参数 , 你输入要搜索的内容 , 点确认 , 将返回给你一个 xml 数据 , 并在 ie 上显示出来 , 这就是你搜索到的内容拉 .
        这里对 ServiceA 的工作再做点介绍 , 在我们这个项目里 , 它是资源站点 A 提供的服务 , 意思是 , 它查询的数据将全来源于站点 A, 而站点 A 资源添加在本项目也有专门的工程实现 .
        好了 , 回到正题 . 这里我介绍 vs 调用 webservice 的方法 , 其实其他平台的调用方法也是大同小异 . 首先我们介绍 web 引用方式 , 这种方式我强烈建议调试时使用 , 非常方便 . 右击引用 , 点添加 web 引用 , 输入你的 webservice 地址 , 你必须保证你输入的 webservice 存在 . 然后引用即可 , 注意 :web 引用名将作为你加入的 webservice 的名字空间 . 比如你输入了 : localhost , 那服务的实例化将是这样 : localhost .Service1 serviceA=new localhost .Service1();(Service1 是服务的类名 ).
       完成了这一步 ,service 的调用似乎变的那么简单 , 我们已经实现了远程实例化 , 接下来的远程调用也是一样的容易 . 下面给出资源采集站 ServiceGatherSite 的绑定代码 ( 只采集 A 站点的信息 )
XmlDataDocument xd = new XmlDataDocument();
    DataSet ds = new DataSet();
    protected void Page_Load(object sender, EventArgs e)
    {
        localhost.Service ge = new localhost.Service();
        XmlNode xmlNode1;
        XmlDataDocument xd = new XmlDataDocument();
        StringBuilder xmlString1;
        xmlNode1 = ge.GetSiteAData();
        if (xmlNode1 == null) //-- 存储过程执行失败
            return;
        xmlString1 = new StringBuilder(xmlNode1.OuterXml);
        if (xmlString1.ToString().Equals("<NewDataSet xmlns=/"/"></NewDataSet>"))
            return;
        xd.LoadXml(xmlString1.ToString());
        ds.ReadXml(new XmlNodeReader(xd));
        GridView1.DataSource = ds.Tables[0].DefaultView;
        GridView1.DataBind() ;}
此段代码给出了 xml 转化成 dataset 的解决方案 , 虽然这不是必须的 , 但毕竟在 asp.net ,dataset 占的作用之重 , 谁都知道的 . 其他的请朋友们先看 ( 呵呵 , 个中高手就免了 )
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值