使用Soap消息调用Web Services

services|web

Web Services技术使异种计算环境之间可以共享数据和通信,达到信息的一致性。随着异种计算机环境的不断增加,我们会更加经常的调用各种不同计算机体系中编写和发布的Web Services,作者在本文中给出了使用VB应用程序调用java平台编写和发布的Web Services的实践过程, 并且分析了如何根据WSDL文件构造SOAP消息的方法。
    一 SOAP简介

    1.SOAP定义

    SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议.

    它包括四个部分:

    SOAP封装(envelop): 封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;
    SOAP编码规则(encoding rules): 用于表示应用程序需要使用的数据类型的实例;
    SOAP RPC表示(RPC representation): 表示远程过程调用和应答的协定;
    SOAP绑定(binding): 使用底层协议交换信息。

    2.SOAP消息

    SOAP采用了已经广泛使用的两个协议:HTTP和XML。其中HTTP用于实现SOAP的RPC风格的传输,而XML是它的编码模式,一个SOAP请求实际上就是一个HTTP POST请求。

    其它详细的SOAP方面的信息请参考 http://www.w3.org/TR/2001/WD-soap12-20010709/

    二 WSDL简介

    WSDL (Web Services Description Language)是一种XML Application,他的作用是将一个Web Services描述为一组服务访问点.

    WSDL文档将一个Web Services描述成一组网络端点或者端口,在WSDL中,由于服务访问点和消息的抽象定义已经和具体的服务期部署和数据格式绑定分离,因此可以再次使用这些抽象对象: 消息,是对需要交换信息的抽象描述;端口类型,是对Web Service提供的操作的抽象集合。

    特定端口类型的具体协议和数据格式定义构成了一个可以从用的绑定,一个端口定义成一个可重用绑定和网络地址的关联,一组端口构成了一个服务。

    WSDL在定义Web Sevices时使用了以下元素:

    Types: 数据类型的容器,他采用一些类型系统(比如常用的XSD)
    Message: 通信消息的抽象类型化定义
    Operation: 服务提供的操作的抽象化描述
    Port Type: 一个或者多个端点支持的一组操作的抽象
    Binding: 特定端口类型的具体协议和数据格式定义
    Port:定义为binding和网络地址的关联的单个的端点
    Service: 一组相关的端点的结合

    详细的WSDL定义和相关信息请参考: http://www.w3c.org/TR/wsdl

    三 使用WSAD开发和发布一个Web Services

    1.我们用WSAD(Websphere Studio Application Developer)创建一个HelloWorld的java类,他只有一个方法,就是返回一个字符串HelloWorld。

// HelloWorld.java

package hello;

public class HelloWorld {
  public String getString(){
    return "Hello World!";
  }
}

    2.将该类作为web service 发布到WASD带的测试环境的服务器上

    发布后我们可以在web工程的wsdl文件下面找到两个.wsdl文件: HelloWorld-service.wsdl, HelloWorld-binding.wsdl,HelloWorld-binding.wsdl文件中主要描述了这个web services的服务访问点,HelloWorld-binding.wsdl文件中则描述了这个web services的通信消息的数据结构、每个访问点支持的操作、特定的断口类型的具体协议和数据格式规范的绑定等信息,其具体的含义可以参考使用 WSDL 部署 Web 服务:

    第 1 部分(http://www-900.cn.ibm.com/developerworks/cn/webservices/ws-intwsdl/part1/index.shtml)一文 HelloWorld-service.wsdl的内容如下:

<definitions name="HelloWorldService" targetNamespace="http://localhost:808/WForecast/wsdl/HelloWorld-service.wsdl" 
xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://localhost:808/WForecast/wsdl/HelloWorld-service.wsdl" 
xmlns:binding="http://www.helloworld.com/definitions/HelloWorldRemoteInterface" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <import namespace="http://www.helloworld.com/definitions/HelloWorldRemoteInterface"
  location="http://localhost:808/WForecast/wsdl/HelloWorld-binding.wsdl"/>
  <service name="HelloWorldService">
    <port name="HelloWorldPort" binding="binding:HelloWorldBinding">
      <soap:address location="http://localhost:808/WForecast/servlet/rpcrouter"/>
    </port>
  </service>
</definitions>

HelloWorld-binding.wsdl的内容如下:

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?>
<definitions name="HelloWorldRemoteInterface"
targetNamespace="http://www.helloworld.com/definitions/HelloWorldRemoteInterface"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://www.helloworld.com/definitions/HelloWorldRemoteInterface"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <message name="getString">
    <part name="result" type="xsd:string"/>
  </message>
  <portType name="HelloWorldJavaPortType">
    <operation name="getString">
      <output name="getString" message="tns:getString"/>
    </operation>
  </portType>
  <binding name="HelloWorldBinding" type="tns:HelloWorldJavaPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="getString">
      <soap:operation soapAction="" style="rpc"/>
      <output name="getString">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:HelloWorld"/>
      </output>
    </operation>
  </binding>
</definitions>

    3. 启动WSAD中的测试服务器

[1] [2] 下一页  

时间: 2024-08-12 15:18:37

使用Soap消息调用Web Services的相关文章

[导入]Asp.net Ajax调用web services IE7下正常,FF下就不好使了

Asp.net Ajax调用web services IE7下正常,FF下就不好使了 文章来源:http://blog.csdn.net/chsword/archive/2007/02/26/1515419.aspx

C++如何动态调用Web Services

问题描述 求问C++如何动态调用WebServices?gSoap应该不行,因为它要根据wsdl手动生成头文件.现在的需求是可以支持扩展,对于之前没有的服务,知道其uri就可访问它的服务ps:提供服务的接口名称已知刚刚接触webservices,可能描述不准确. 解决方案 解决方案二:#include<stdio.h>#import"msxml4.dll"usingnamespaceMSXML2;#import"C:ProgramFilesCommonFilesM

如何在ASP环境下利用SOAP来调用C#开发的Web Services

services|web 如何在ASP环境下利用SOAP来调用C#开发的Web Services,作为.NET Web Services的斑竹,很多朋友都问我如何在其他环境下调用Web Services,原理其实很简单,大家都知道Web Services是基于SOAP协议通信的,在其他环境下自然可以利用SOAP来访问Web Services了.下面我就一个具体的例子来说明调用过程.开发环境:windows 2000          SOAP Tookit3.0          IIS 我用C

使用Integrated Web Services Client for ILE在ILE程序中调用Web Service 一

IBM Integrated Web Services for i是IBM最新发布的在IBM i上的SOA解决方案,包括Integrated Web Services Server for i和Integrated Web Services Client for ILE两部分.Integrated Web Services Server for i使用户能够将ILE RPG 和 COBOL程序快速部署成Web Services,而Integrated Web Services Client fo

Java与.NET 的Web Services相互调用

services|web 一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services. 二:项目需要的工具 Windows2000 Server(IIS) Jbuilder9.0( 含有Tomcat , axis) JDK1.4+Java Web Services Develop VS.Net 20

在Rational Application Developer平台上基于JAX-WS开发Web services

引言 Web Services 是一种面向服务的技术,通过标准的 Web 协议提供服务,目的是保证不同平台 的应用服务可以互操作.依据 web services 规范实施的应用之间,无论它们所使用的语言. 平台或内部协 议是什么,都可以相互交换数据,这就是 web services 的好处.本文选择 IBM WebSphere Application Server 作为 web services 的运行环境,并选择 IBM Rational Application Developer(以下简称

基于JAX-WS开发Web services快速入门

Web Services 是一种面向服务的技术,通过标准的 Web 协议提供服务,目的是保证不同平台的应用服务可以互操作.依据 web services 规范实施的应用之间,无论它们所使用的语言. 平台或内部协议是什么,都可以相互交换数据,这就是 web services 的好处.本文选择 IBM WebSphere Application Server 作为 web services 的运行环境,并选择 IBM Rational Application Developer(以下简称 RAD)f

通过Web Services上传和下载文件

services|web|上传|下载 随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而且需要传递二进制文件信息.下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器. 一:通过Web Services显示和下载文件 我们这里建立的Web Services的名称为GetBinaryFile,提供两个公共方法:分别是Ge

通过PL/SQL访问Web Services

在Web Services红得发紫的今天,到处都在谈论和使用Web Services:当然,其中有不小一部分是属于业界炒作.Oracle也始终走在技术的最前沿,早在9i时代就发布了扩展包来支持PL/SQL访问Web Services,并且在Oracle 10g版本中使得该功能变得更加强大:这都源于引入了UTL_DBWS包,其实它是封装了JPublisher,使得PL/SQL开发者只需要使用简单的几个API就能调用Web Services了. 下面我将通过一个实例向你展示如何通过PL/SQL调用W