免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7340 | 回复: 4
打印 上一主题 下一主题

ASE WebServices配置示例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-02 10:12 |只看该作者 |倒序浏览
ASE的WebService功能

ASE自从12.5.1以后提供了WebService的功能。ASE提供的WebService功能总接下来包括三个部分:
•        ASE提供WebService的服务端,供其它WebService客户端调用。这也叫做ASE WebService生产者。ASE WebService生产者提供了三个方法,供客户端调用,将SQL或者存储过程执行结果以SOAP格式返回给调用者。
•        ASE WebService组件也可以作为WebService的客户端,调用其他WebService的服务。这也叫做ASE WebService消费者。
•        用户也可以在ASE WebService服务器上自定义自己的WebService服务,供其他客户端掉用。用户自定义WebService服务可以执行一段SQL语句并返回执行结果。
        本文以ASE15.0.2为例介绍一下如何配置ASE WebService生产者供其它客户端调用。

安装ASE WebService组件
在安装ASE服务器时,需要安装ASE WebService组件。这一组件是ASE的一个Feature,需要有ASE WebService的License才能使用这一功能。
安装过程如果选择ASE WebService组件,则安装时就可以配置ASE WebService服务器。配置过程也可以放到安装结束以后通过Sybase Central单独配置。

ASE WebService组件的配置
        ASE WebService组件的配置包括三部分内容:生产者配置、SSL配置、消费者配置。
        配置过程非常的简单,如果是通过Sybase Central配置,只需根据提示进行配置即可。如果想通过WebService来执行SQL语句或者ASE中的存储过程,只需要配置生产者即可,SSL与消费者的配置可跳过。此时只需要指定WebService服务器供客户端掉用的端口号。默认端口号是8181。
        
激活ASE WebService功能
        配置完成后,首先使用sa登录到ASE数据库:
        Isql –U sa –P –SDBNAME
        执行如下语句激活WebService功能:
        Sp_configure “enable webservices”,1
        Go
        如果没有webservice 功能的license,将不能激活该功能。

ASE WebService服务器的启动
        使用命令行方式进入到C:\Sybase\WS-15_0\bin下(c:\sybase是ASE的安装目录)执行:
        runws -U sa -P nopasswordspecified  -S DBNAME
注意,此处如果sa口令为空,-P 后的参数一定要为nopasswordspecified 。-S 后面跟的是ASE服务器的名字,一定要与c:\sybase\ini\sql.ini里配置的服务名称相符。
如果一切正常,那么ASE WebService将为启动,端口号8181。此时如果在IE浏览器里输入:http://localhost:8181/services/ase?wsdl,将会出现ase服务的WSDL文件。ase服务提供了三个方法:
•        Login:建立一个持久的数据库连接。但这个不是必需的,如果直接调用execute方法,系统会使用execute方法提供的用户名与口令建立一个临时的数据库连接。
•        Logout:断开由Login建立的持久连接
•        Execute:执行SQL或者存储过程。关于该方法的参数请参考Sybase官方文档。
Runws还有其他参数,详细请参考sybase官方文档。
停止ASE WebService的命令如下:
stopws -U sa -P nopasswordspecified  -S DBNAME

测试
        有了WSDL,想必大家都应该知道下一步如何做了。只需要使用工具将WSDL编译成后面我们需要的客户端stub文件即可。
        如果你需要立即测试ASE WebService配置是否正确,ASE提供了一个测试用的客户端。在命令行下进入到C:\Sybase\WS-15_0\samples\apacheclient,执行:
        runexecute "http://localhost:8181/services/ase" DBNAME sa "" "columnstyle=attribute,tablename=ws" all 1 "select @@version"
这个测试脚本通过java调用ASE WebService发布的ase服务的execute方法,用以执行SQL: select @@version。如果一切正常,你将会看到你非常熟悉的xml输出。
Runexecute的语法如下:
runexecute “web_service_URLaseServerName user_ID password SQLX_optionoutput_class count sql_statement
参数如下:
• web_service_URL
正在使用的Web 服务的位置。
• aseServerName
SOAP string,表示interfaces 文件或LDAP 服务器中Adaptive ServerEnterprise 服务器的名称。
• user_ID
登录到Adaptive Server Enterprise 所需的用户ID。
• password
登录到Adaptive Server Enterprise 所需的口令。
• SQLX_option
表示一个或多个option 参数的字符串。这些参数用于指定SQLX 结果集的特性。以下是有效的选项参数:
• binary={hex | base64}
• columnstyle={element | attribute}
• format={yes | no}
• header={yes | no}
• nullstyle={attribute | omit}
• prefix=“value”
• root={yes | no}
• rowname=“value”
• schemaloc=“value”
• statement={yes | no}
• tablename=“value”
• targetns=“value”
• output_class
所需的输出类型。以下是此参数的有效值:
• schema — 返回
XML 模式。
• dtd — 返回
XML DTD。
• data — 返回结果集。
• all — 返回模式、DTD 和数据。
• count
执行此语句的次数。如果count 的值大于
1,则会创建一个会话并使用持久连接。
• sql_statement
要在Adaptive Server Enterprise 上执行的语句。该语句必须用双引号分隔。
你可以试着改变一下runexecute的参数看一下输出的变化:
runexecute "http://localhost:8181/services/ase" DBNAME sa "" "columnstyle=attrib ute,tablename=ws" all 1 "select @@version"
当然,你也可以改变执行的SQL语句,看看执行结果输出。

Runexecute调用的java类的源代码请参考本文的最后一部分。这个源代码可以作为一个示例程序,供参考。

其他的配置工作
        对于将ASE作为其他WebService的客户端的配置(使用sp_webservices),以及如何配置自定义的WebService服务(使用create service,drop service命令),ASE都提供了相应的命令,也非常的简单易用,另外还有SSL的配置。大家不妨参考Sybase文档逐一验证。

客户端参考代码
import com.sybase.apachetest.*;
import javax.xml.rpc.Stub;
import java.net.URL;
import java.security.Security;
public class ASEExecute
{
    public static void main(String[] args)
    {
        try
        {
            if (args.length <
            {
                System.out.println ("Gotta have 8 args only got: " + args.length + "\n";
                System.out.println ("Argument 1: Endpoint for SOAP ";
                System.out.println ("Argument 2: ASE Service Name ";
                System.out.println ("Argument 3: ASE Username to login as ";
                System.out.println ("Arugment 4: ASE Password to use in login ";
  System.out.println ("Argument 5: SQL X Options ";
  System.out.println ("Argument 6: Dataoutput (one of all, schema, dtd or data or count)";
                System.out.println ("Arugment 7: Number of times to execute (in session) ";
                System.out.println ("Arugment 8: SQL to execute ";
                System.exit (1);
            }
            String endpoint = args[0];
            System.setProperty ("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol";
     Security.addProvider (new com.sun.net.ssl.internal.ssl.Provider());
            URL endURL = new URL (endpoint);
            String serverName = args[1];
            String userName = args[2];
            String password = args [3];
            if (password.compareTo("nopasswordspecified") == 0)
            {
             System.out.println ("Replacing password with null token.");
             password = "";
            }
            String sqlxOptions = args[4];
            String dataOutput = args[5];
            String numExecutionStr = args[6];
            int numExecution = 1;
            try
            {
  Integer tmp = new Integer (numExecutionStr);
         numExecution = tmp.intValue ();
            }
            catch (NumberFormatException err)
            {
                System.out.println ("Could not convert " + numExecutionStr + " to a number.");
                System.out.println ("Assuming 1 execution.");
                numExecution = 1;
            }
            String sql = args[7];
            System.out.println ("SOAP Endpoint: " + endpoint);
            System.out.println ("ASE Service Name: " + serverName);
            System.out.println ("ASE Username: " + userName);
            System.out.println ("ASE Password: ********** "  );
            System.out.println ("SQL X options: " + sqlxOptions);
            System.out.println ("Data Output: " + dataOutput);
            System.out.println ("Number of executions: " + numExecution);
            System.out.println ("Sql Select to execute: " + sql);
            
            ExecuteStoredProcServiceLocator service = new ExecuteStoredProcServiceLocator ();
            if (numExecution != 1)
            {
                service.setMaintainSession (true);
            }
            ExecuteStoredProc port = service.getase(endURL);
  for (int ii = 0; ii < numExecution; ii++)
  {
             DataReturn[] data = port.execute (serverName,  
                                                  userName,
                                                  password,
        sqlxOptions,
                                                  sql);

             if (data != null)
             {
   for (int jj = 0; jj < data.length; jj++)
   {
            System.out.println ("rinting result set #" + jj );
        if (dataOutput.compareTo ("all") == 0
     || dataOutput.compareTo ("dtd") == 0)
        {
            System.out.println ("data.getDTD is: \n" + data[jj].getDTD ());
        }
  
        if (dataOutput.compareTo ("all") == 0
            || dataOutput.compareTo ("data") == 0)
        {
      System.out.println ("data.getXML is: \n" + data[jj].getXML ());
                   }
  
        if (dataOutput.compareTo ("all") == 0
            || dataOutput.compareTo ("schema") == 0)
         {
                       System.out.println ("data.getSchema is: \n" + data[jj].getSchema ());
        }
                   System.out.println ("data.updateCount is: " + data[jj].getUpdateCount ());
    }
   }
      }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }   
}

论坛徽章:
0
2 [报告]
发表于 2008-04-02 10:26 |只看该作者
不错,够详细!精华

论坛徽章:
0
3 [报告]
发表于 2008-04-02 14:46 |只看该作者
可惜好多脸啊。。。。。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
4 [报告]
发表于 2008-04-03 11:06 |只看该作者
我认识,很熟很熟。

论坛徽章:
0
5 [报告]
发表于 2008-05-05 15:24 |只看该作者
不错。。。。。。。。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP