`

call webservice

阅读更多
web services是用delphi写的,接口如下:

interface

uses InvokeRegistry, Types, XSBuiltIns;

type

  { Invokable interfaces must derive from IInvokable }
  IQQService = interface(IInvokable)
  ['{9604D694-3FFF-4D64-9041-0EE9BE9C166C}']

    { Methods of Invokable interface must not use the default }
    { calling convention; stdcall is recommended }
    function ListAccount(var QQList : Olevariant):boolean; stdcall;//列出可供申请的QQ号码
    function RequestQQ():String;stdcall; //随机产生一个QQ号码
    function GetQQPassword(QQ:String):String;stdcall; //取得相应QQ号码的密码
  end;

implementation

initialization
  { Invokable interfaces must be registered }
  InvRegistry.RegisterInterface(TypeInfo(IQQService));

end.


调用web services的代码:
package sunflowerbbs.oicp.net;

import java.net.URL;
import java.util.Vector;

import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;

public class Soap {

	final static String SOAPURL = "http://sunflowerbbs.oicp.net:9015/UniversalService/QQService.dll/soap/IQQService";

	public String doSOAPRequest(String _strURI, String _strMethodName,
			String _strName, String _strValue) throws Exception {
		// 创建一个远程调用
		Call call = new Call();
		// 设置远程对象的URI
		call.setTargetObjectURI("urn:" + _strURI);
		// 设置调用的方法名
		call.setMethodName(_strMethodName);
		// 设置编码风格
		call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
		// 设置方法调用的参数
		if (_strName != null) {
			Vector params = new Vector();
			params.addElement(new Parameter(_strName, String.class, _strValue,
					null));
			call.setParams(params);
		}
		// 发送RPC请求
		Response resp = call.invoke(new URL(SOAPURL), "");
		if (resp.generatedFault()) {
			// 远程调用出错处理
			Fault fault = resp.getFault();
			System.out.println("调用失败!");
			System.out.println("错误代号:" + fault.getFaultCode());
			System.out.println("错误信息:" + fault.getFaultString());
			return "调用失败!";
		} else {
			// 调用成功,获取返回值
			Parameter result = resp.getReturnValue();
			return result.getValue().toString();
		}
	}

	public static void main(String[] args) {
		System.out.println("SOAP调用测试开始。。。");
		try {
			Soap mysoap = new Soap();
			// 调用远程的SOAP服务
			String qq = mysoap.doSOAPRequest("QQServiceIntf-IQQService",
					"RequestQQ", null, null);
			String password = mysoap.doSOAPRequest("QQServiceIntf-IQQService",
					"GetQQPassword", "QQ", qq);
			System.out
					.println(String.format("QQ=%s,Password=%s", qq, password));
		} catch (Exception e) {
			System.out.println("调用Soap异常!");
			e.printStackTrace();
		}
		System.out.println("SOAP调用测试结束。。。");
	}

}

再看看wsdl:
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IQQServiceservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
  <message name="ListAccount0Request">
    <part name="QQList" type="xs:anyType"/>
  </message>
  <message name="ListAccount0Response">
    <part name="QQList" type="xs:anyType"/>
    <part name="return" type="xs:boolean"/>
  </message>
  <message name="RequestQQ1Request"/>
  <message name="RequestQQ1Response">
    <part name="return" type="xs:string"/>
  </message>
  <message name="GetQQPassword2Request">
    <part name="QQ" type="xs:string"/>
  </message>
  <message name="GetQQPassword2Response">
    <part name="return" type="xs:string"/>
  </message>
  <portType name="IQQService">
    <operation name="ListAccount">
      <input message="tns:ListAccount0Request"/>
      <output message="tns:ListAccount0Response"/>
    </operation>
    <operation name="RequestQQ">
      <input message="tns:RequestQQ1Request"/>
      <output message="tns:RequestQQ1Response"/>
    </operation>
    <operation name="GetQQPassword">
      <input message="tns:GetQQPassword2Request"/>
      <output message="tns:GetQQPassword2Response"/>
    </operation>
  </portType>
  <binding name="IQQServicebinding" type="tns:IQQService">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="ListAccount">
      <soap:operation soapAction="urn:QQServiceIntf-IQQService#ListAccount" style="rpc"/>
      <input message="tns:ListAccount0Request">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </input>
      <output message="tns:ListAccount0Response">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </output>
    </operation>
    <operation name="RequestQQ">
      <soap:operation soapAction="urn:QQServiceIntf-IQQService#RequestQQ" style="rpc"/>
      <input message="tns:RequestQQ1Request">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </input>
      <output message="tns:RequestQQ1Response">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </output>
    </operation>
    <operation name="GetQQPassword">
      <soap:operation soapAction="urn:QQServiceIntf-IQQService#GetQQPassword" style="rpc"/>
      <input message="tns:GetQQPassword2Request">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </input>
      <output message="tns:GetQQPassword2Response">
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/>
      </output>
    </operation>
  </binding>
  <service name="IQQServiceservice">
    <port name="IQQServicePort" binding="tns:IQQServicebinding">
      <soap:address location="http://sunflowerbbs.oicp.net:9015/UniversalService/QQService.dll/soap/IQQService"/>
    </port>
  </service>
</definitions>


注意:
<operation name="GetQQPassword"> 
<soap:operation soapAction="urn:QQServiceIntf-IQQService#GetQQPassword" style="rpc"/> 
<input message="tns:GetQQPassword2Request"> 
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/> 
</input> 
<output message="tns:GetQQPassword2Response"> 
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:QQServiceIntf-IQQService"/> 
</output> 
</operation>

它标识了命名空间下的函数名,输入参数,输出参数.

注意
<soap:address location="http://sunflowerbbs.oicp.net:9015/UniversalService/QQService.dll/soap/IQQService"/> 

它标识了soap调用的地址.

下面附注源码(包含必须的xerces.jar,activation.jar,soap.jar,mail.jar).
0
0
分享到:
评论

相关推荐

    ScriptManager call webservice sample

    &lt;asp:Button ID="btnCallWebService" runat="server" Text="Call WebService" OnClientClick="callWebService(); return false;" /&gt; &lt;asp:Label ID="lblResult" runat="server"&gt;&lt;/asp:Label&gt; function ...

    VBA Call WebService

    在“VBA Call WebService”的场景中,我们关注的是如何使用VBA来调用Web服务,尤其是通过SoapToolkit进行通信。 SoapToolkit是一个用于创建和消费SOAP(Simple Object Access Protocol)消息的工具,它使得VBA能够...

    CB Call WebService

    而"CB Call WebService"则是一个具体的项目实例,展示了如何在C++ Builder 6.0环境下调用Web服务。 Web服务是一种通过互联网进行通信的标准协议,它允许应用程序之间交换数据和协同工作。最常见的是基于SOAP...

    Call WebService.rar

    在IT领域,Web服务是一种通过网络进行通信的软件系统,常用于不同应用程序之间的交互。C#作为.NET框架的一部分,提供了一种强大而便捷的方式来调用Web服务,特别是那些基于SOAP(简单对象访问协议)的Web服务。...

    SQL Server调用Webservice示例

    在示例中,"SQL项目调用Webservice示例"可能包含了一个完整的.NET存储过程示例,用于演示如何构建和调用Web Service。可能的结构包括: - 存储过程源代码,展示如何使用`System.Web.Services`命名空间的`WebClient`...

    C#动态调用webservice服务

    C#动态调用webservice服务 先初始化类 WebServiceCall.WebServiceCall webservicecall1 = new WebServiceCall.WebServiceCall(); 然后调用方法 WebService()

    FB4 SOAP WebService C#

    FB4 call WEBSERVICE,base on SOAP protocol.. the webservice writed with C#. FB4 call WEBSERVICE,base on SOAP protocol.. the webservice writed with C#. FB4 call WEBSERVICE,base on SOAP protocol.. the ...

    从PLSQL调用web services实例源码

    在IT行业中,Web服务是一种基于互联网的标准协议,用于应用程序之间的通信。...然而,通过一些特定的方法,我们可以让PL/SQL调用Web服务,从而实现数据库与外部系统的集成。本文将深入探讨如何从PLSQL调用Web服务的实例...

    java代码-使用java解决webservice接口call调用方式的源代码

    java代码-使用java解决webservice接口call调用方式的源代码 ——学习参考资料:仅用于个人学习使用!

    ABAP调用外部WebService

    在SAP中调用外部WebService还需要创建一个RFC (Remote Function Call) 目的。这个步骤确保SAP系统能够通过HTTP协议与外部WebService建立连接。主要步骤包括: 1. **配置RFC连接**: 使用事务代码SM59进入RFC连接配置...

    java调用json参数的webservice

    在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...

    webservice 开发过程 详解

    ### WebService开发过程详解 #### 一、概述 本文将详细介绍如何使用Eclipse集成开发环境(IDE)结合Tomcat服务器及Axis框架来开发一个简单的WebService应用。对于初学者来说,这是一个很好的入门指南,通过本教程...

    oracle调用webservice接口地址demo

    ### Oracle调用WebService接口地址Demo解析 #### 一、引言 在企业级应用开发中,不同系统间的集成与通信尤为重要。Oracle数据库作为一款广泛使用的数据库管理系统,支持多种方式与其他系统进行交互,其中通过调用...

    webservice调用,传参代码样例

    Web服务(WebService)是一种基于标准协议的,可互操作的软件接口,允许不同系统之间进行数据交换和功能调用。在本案例中,我们将重点讨论如何使用Axis框架来调用Web服务并传递参数。 首先,我们需要理解Web服务的...

    webservice之通俗理解

    ### WebService之通俗理解 #### 一、WebService简介与应用场景 WebService是一种标准的网络服务,它使得不同系统之间可以通过标准的协议(如HTTP)进行数据交换和服务调用,而无需关心底层实现细节。WebService...

    android 调用.net webservice

    ### Android调用.NET WebService详解 #### 一、概述 在Android开发中,与服务器进行交互是必不可少的一个环节。常见的交互方式包括HTTP请求、RESTful API等,而WebService作为一种传统但依然广泛使用的通信协议,...

    Java调用php的webservice

    Call call = (Call) service.createCall(); ``` 通过`createCall()`方法创建一个`Call`对象,用于发送请求。 ##### 3. 设置目标地址 ```java call.setTargetEndpointAddress(new java.net.URL(endpoint)); ``` 设置...

    Java访问c#开发的webservice

    ### Java访问C#开发的Webservice详解 #### 一、引言 在现代软件开发过程中,尤其是对于大型项目而言,采用分布式系统架构已经成为一种常态。分布式应用能够将复杂的业务逻辑分解并部署到不同的服务器上,从而提高...

Global site tag (gtag.js) - Google Analytics