你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介│广告服务│读者反馈│编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 网络与通信
4.15 WebService远程申报系统
 

一、引言

随着互连网的飞速发展,人们生活方向、工作、学习等方式也随之发生了深刻的变化。就政府部门来说,也需要通过转变服务理念和方式,为人们提供更加便捷、高效的服务。通过基于WebService的网上申报系统建设,可以极大地方便人们与政府之间便捷的信息沟通和服务。

二、简介

1.WebService的定义

WebService中文称之为“Web服务”。WebService是一个Web上的组件编程模型,在这个模型中,各个应用都以服务(组件)的形式在Web上发布,然后远程的应用程序可以通过一个统一的访问方式(Http+SOAP)来调用这个服务,将其集成到本地的应用程序中。WebService也是一个分布式计算模型,但是它打破了COBRA、DCOM及RMI的客户与服务紧耦合的限制,比它们中的任何一种都更具优势。

2.WebService的优点

WebService的优点或者说优势有很多,下面就是最为重要的几个:

首先就是它的松耦合性。客户或服务任何一方执行机制的改变都不会影响应用程序的正常运行。

互操作性。任何 Web 服务都可以与其他 Web 服务进行交互。

集成性和简单性。这里有两点,第一可以使用任何语言(如C、C++、VB、VC、Java,甚至COBOL)来编写 Web 服务,开发者无需更改他们的开发环境就可生产和使用 Web 服务。第二,已有的组件(如COM)很容易被包装成Web服务。

普遍性。Web 服务使用 Http 和 XML 进行通信。因此,任何支持这些技术的设备都可以拥有和访问 Web 服务。

行业支持。所有主要的供应商都支持 SOAP 和周边 Web 服务技术。例如,微软的 .NET 平台就基于 Web 服务,因此用 Visual Basic 编写的组件很容易作为 Web 服务部署。

3.WebService的主要协议

Webservice的主要协议有SOAP、UDDI和WDSL。

SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC (RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

UDDI(Universal Description, Discovery and Integration)统一描述、发现和集成协议,是为解决Web服务的发布和发现问题而制订的新一代基于Internet的电子商务技术标准。它包含一组基于Web的、分布式的Web服务信息注册中心的实现标准,以及一组使企业能将自己提供的Web服务注册到该中心的实现标准。

WSDL(Web Service Description Language)Web服务器描述语言,是用XML文档来描述Web服务的标准,描述Web服务的位置、提供的操作(方法)和所接收的数据格式及必要协议等。

三、系统架构

本申报系统包括服务器和客户端两部分,服务器端用于数据的存储。客户端的功能主要是接受用户申报信息输入并根据用户请求,进行数据查询,系统架构如下图所示:


图 系统框架

用户按照申报要求进行申报数据的录入后,利用WebService服务进行数据的提交,同时调用相关WebService服务进行审批回执信息的查询。

四、系统实现

系统提供的WebService 总是在后台运行,并提供一系列接口供客户端调用。系统主要采用.Net平台进行开发,其核心技术为:通用语言进行时(Common Language Runtime)、基类库(Base ClassLibrary)、Net语言及可视化开发环境。

1.WebService的建立

系统采用Visual Studio .Net 2003进行开发(程序设计语言使用C#),在Visual Studio .Net 2003中通过创建ASP.NET服务,开发系统需要使用的WebService命名为remoservice.asmx,主要包括三个服务分别用于测试是否连接上服务器、从服务器上查找数据返回到客户端、将客户端上传的添加数据保存在服务器上实现代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

using System.IO;

using System.Data.SqlClient;

using MYWebService.Code.Bean;

using MYWebService.Code.Xml;

using MYWebService.Code.Sys;

using MYWebService.Code.Util;

namespace MYWebService {

    /// 进行数据同步(支持上传与下载数据)

    public class MYService : System.Web.Services.WebService {   

        public MYService() {

            ///CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的

            InitializeComponent();

        }

        #region 组件设计器生成的代码

        ///Web 服务设计器所必需的

        private IContainer components = null;

        private void InitializeComponent() {

        }

            /// 清理所有正在使用的资源。

            protected override void Dispose( bool disposing ) {

            if(disposing && components != null) {

                components.Dispose();

            }

            base.Dispose(disposing);       

        }

        #endregion

        [WebMethod(Description = "Web 服务提供的方法,用于测试是否连接上服务器")]

        public bool testConnect(){

            bool flag = true;

            DataBase database = new DataBase();

            SqlConnection conn = database.getConnection();

            try{

                conn.Open();

                conn.Close();

            }

            catch(Exception){

                flag = false;

            }

            return flag;

        }

        [WebMethod(Description = "Web 服务提供的方法,从服务器上查找数据返回到客户端")]

        public DataSet selectDataFromServer(DataSet paramDs) {

            DataTable dt = paramDs.Tables[0];

            DataBase database = new DataBase();

            SqlConnection conn = database.getConnection();

            DataSet ds = new DataSet();

            int rowCount = dt.Rows.Count;

            string tableName = "";

            string sql = "";

            for(int i=0;i<rowCount;i++){

                DataRow dr = dt.Rows[i];

                tableName = dr["tableName"].ToString();

                sql = dr["sql"].ToString();

                try{

                    SqlDataAdapter da = new SqlDataAdapter(sql,conn);

                    da.Fill(ds,tableName);

                }

                catch(Exception){

                }

            }

            return ds;

        }

        [WebMethod(Description = "Web 服务提供的方法,将客户端的上传的添加数据保存在服务器上")]

        public DataSet insertDataToServer(DataSet ds) {

            DataOperation dp = new DataOperation();

            DataSet returnDs = new DataSet();

            string tableName = "";

            int tableCount = ds.Tables.Count;

            for(int i=0;i<tableCount;i++){

                tableName = ds.Tables[i].TableName;

                returnDs.Tables.Add(dp.insertData(tableName,ds.Tables[i]));

            }

            return returnDs;

        }

}

2.WebService的使用

Visual Studio.Net 内建提供了对 WebService 的调用。在VC.NET中,调用 WebService 只需要简单的几个步骤即可。只要找到 WebService 的发布地址,将地址引入到VC工程中。这时,编译器会预先编译一次,自动生成和 WebService 相关的头文件(也可以叫Web代理文件) WebService .h。 在客户端程序中,包含 WebService .h然后生成相关的对象,就可以对远程的 WebService 进行调用了。简要步骤如下:在客户端工程文件中右击引用,点添加Web引用,输入WebService地址,如:http://localhost/remote /remoservice.asmx,只要保证输入的WebService存在,然后引用即可。需要注意的是Web引用名将作为加入的Webservice的名字空间.比如Web引用名输入了:Tremote,服务的实例化将是这样:Tremote.remoservice  serviceA=new Tremote.remoservice ();(remoservice是服务的类名),在这里不做具体阐述了。

五、结语

Webservice以其独特的特点,在数据传输与通信等方面,发挥了巨大的作用,通过本文对申报系统的实现阐述,希望能够对广大读者对Webservice的理解能够有所帮助。

 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089