其实,我要实现的服务功能很简单:通过Web服务查询存储在SQL Server 2005数据库中的学生信息,具体来说就是提供学号作为参数查询该学生的姓名和EMAIL。虽然是很简单的Web服务,但是它能把开发Web服务的流程都覆盖了,完成它还是觉得蛮有成就感的(尤其是解决了很多细节上的问题)。下面就是我的思路和做法:
基本思路:
1. 编写ASP.NET Web服务,由VS协助生成WSDL文件;
2. 在客户端,利用Axis2的WSDL2JAVA命令和已知的URI,将生成的WSDL文件转换成Java Stub文件;
3. 调用生成的Java Stub文件完成查询工作。在调用该文件中的方法时,Axis2会自动帮助我们生成相应的SOAP消息发送到服务器端,并将服务器端返回的结果提取出来交给客户端程序。因此,Axis2在这个过程中为我们减少了很多繁杂的工作。
具体做法:
1. 利用Transact-SQL语句构建名为Assign的数据库并建立StudentInfo表(学号,姓名,Email);
2. 编写后台实现代码InfoEndSystem.cs,通过学号作为参数查询数据库并返回姓名和Email,测试代码保证能正常运行;
3. 在Visual Studio 2008中创建ASP.NET Web服务,导入后台代码,并在StudentInfoService.asmx中定义WebMethod(如,GetStudentName),在这些方法中调用InfoEndSystem.cs中的方法实现相应的功能。运行该Web服务,在IE地址栏输入http://localhost:2844/StudentInfoService.asmx,端口是2844,于是可以看到刚才在StudentInfoService.asmx中定义的WebMethod方法。在服务列表中点击这些服务(如,GetStudentName)便可以使用了;另外,点击“服务说明”看到的就是这个Web服务的WSDL文件。
4. 在客户端,利用Axis2的WSDL2JAVA获取并转化WSDL文件,具体命令是(destination是要存储的路径)
wsdl2java -uri http://localhost:2844/StudentInfoService.asmx?wsdl -o destination
执行成功后,生成StudentInfoSerivceStub.java文件,该文件包含WebMethod的所有实例。
5. 在Eclipse中建立客户端项目,导入StudentInfoSerivceStub.java文件(注意“包”问题),调用相应的方法并测试,即完成项目。
以上就是我处理项目的基本思路和做法,比较简明,我也想借此机会整理一下思路,刚刚解决了一个棘手的问题。现在项目的主要技术问题都解决了。关于遇到的问题和一些细节的处理方法,有时间在和大家一起分享。也希望大家能不吝赐教,多提意见和建议,不胜感激!