`
touchmm
  • 浏览: 1038611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WebService 使用和调试小结

阅读更多

标题:WebService 使用和调试小结

作者:jrq

链接:http://blog.csdn.net/jrq/archive/2006/05/24/752174.aspx

内容:

对WebService的使用和调试做一下记录。备忘。

因使用JB2005+AXIS 发布WebService,总有一些奇奇怪怪的问题,故使用JB9。


(一)使用 JB9+AXIS 发布 WebService 服务


1.新建Project--Project,新建Web--Web Application;

2.新建Web Service--Web Services Configuration;

3.WebApp选择刚建立的Web Application的名字,其他默认;

4.建立WebService服务端的类(test.java)。

-----------------------------

public class test {
private static int a;
private static int b;

public test() {
}

public void setA(int x) {
this.a=x;
}

public void setB(int y) {
this.b=y;
}

public int getSum() {
int c=a+b;
//System.out.println("a:"+a);
//System.out.println("b:"+b);
//System.out.println("c:"+c);
return c;
}
}

-----------------------------

5.发布 WebService 服务

(1)右击要发布的类,选择“Export as a Web Service”;

(2)如果勾选了“Generate client stub”,则发布后同时生成客户端的类及接口测试类。可以不勾择此项;

(3)“Deploy scope”中可以选择该项为“Session”,其他默认;

(4)“Selection mode”中选择“Allow selected methods”,然后在“Methods in”中选中类要发布的接口方法。可多选。

(5)其他默认,点击“Finish”完成发布后,自动生成WSDL(Web Service Description Language)文件。

6.注意

类的属性使用了private static修饰符。如“private static int a”。

类的方法不能使用static修饰符,如“public int getSum()”,因为静态的类方法是不能发布为WebService接口的。

(二)使用 Delphi7 编写 WebService 的客户端

1.新建Project & Application;

2.New-Other-WebService-WSDL Importer,选择WebService服务的WSDL描述文件,也可选择WSDL文件的URL;

3.单击“Finish”按钮,生成WSDL文件对应*.pas单元文件;

其内容大致如下:

------------------------------------------------------
test = interface(IInvokable)
['{787CE852-EF00-40BA-5802-9BF9DFBF79F0}']
procedure setA(const a: Integer); stdcall;
procedure setB(const b: Integer); stdcall;
function getSum: Integer; stdcall;
end;

function Gettest(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): test;


implementation

function Gettest(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): test;
const
defWSDL = 'http://127.0.0.1:8088/test/services/test?wsdl';
defURL = 'http://127.0.0.1:8088/test/services/test';
defSvc = 'testService';
defPrt = 'test';
var
RIO: THTTPRIO;
begin
Result := nil;

if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;

if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;

try
Result := (RIO as test);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;


initialization
InvRegistry.RegisterInterface(TypeInfo(test), 'http://127.0.0.1:8088/test/services/test', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(test), '');

end.

------------------------------------------------------

4.建议:保存由WSDL文件生成的*.pas单元文件时要重命名(webtest.pas),最好不使用默认名字;

5.Delphi7编写的WebService客户端调用代码:

-----------------------------
uses webtest;

var atest: test; //test类
sum:Integer;
begin
atest:=Gettest(); //要uses wsdl对应*.pas单元文件。
atest.setA(1);
atest.setB(2);
sum:=atest.getSum();
ShowMessage(IntToStr(sum));
end;

-----------------------------

6.注意

如果服务端类的属性没有加static描述,则Delphi7编写的客户端使用setA()、setB()后再getSum()时不能得到正确的结果。

因为WebService是无连接的,每次使用类方法时均得到一个新的对象应用,setA()、setB()后再getSum()操作不是针对同一个对象的。

但加上static后,所有的对象共同使用类的同一个值。如此即可。


另外,如果在JB9+AXIS发布WebService时,“Deploy scope”中选择的是“Session”,而不是默认的“Request”,

在服务端类的属性即使不使用static约束,在Delphi的客户端使用setA()、setB()后再getSum(),也是可以得到正确的返回值。

神奇。^_^


7.建议

本例只做测试和解决问题。如果要给WebService服务端传递数据,最好在接口方法中使用参数。

如修改为getSum(int x,int y)后再发布接口,这个即可使用一个接口方法就可以完成操作,而不必先使用set方法传递参数数据。

(三)使用JB9编写 WebService 的客户端

1.新建Project--Project;

2.新建Web Service--Import a Web Service;

3.在WSDL URL中选择wsdl文件的URL,也可选择WebService服务的WSDL描述文件;

4.因为是建立WebService的客户端,所以“Generate server-side classes”选择可以不勾选;

5.在“Package options”中可以修改“Name”为合适的名字;

6.其余选择默认值,单击“Finish”生成客户端的jajva类文件。一般是6个文件,有其自己的命名规则。可参看JB。

7.JB9编写的WebService客户端测试类

-----------------------------

public class client {

public client() {
}

public static void main(String[] args) {
try {
TestService service = new TestServiceLocator();
Test aClient = service.gettest();
aClient.setA(1);
aClient.setB(2);
int sum = aClient.getSum();
System.out.println("Sum is:"+sum);
}
catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}

-----------------------------

8.注意

如果服务端类的属性没有加static描述,则JB编写的客户端使用setA()、setB()后再getSum()时亦不能得到正确的结果。

建议使用带参数的接口方法来传递参数数据。避免使用set方法。


(四)使用Delphi7调用C#编写的WebService服务

Delphi7编写的客户端调用C#编写的WebService服务时,如果函数中传递的参数为汉字时,可能出现乱码现象。

在网上搜索了一些资料,找到解决办法:将HTTPRIO的UseUTF8InHeader属性改为true即可。

即编辑由WSDL文件生成的*.pas单元文件,在Get函数中增加一句:RIO.HTTPWebNode.UseUTF8InHeader:=True。

代码片断大致如下:

------------------

try
RIO.HTTPWebNode.UseUTF8InHeader:=True; //添加一句,修改编码方案。
Result := (RIO as test);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;

----------------


[--完--]

by jrq

2006/05/24 凌晨 于穗

分享到:
评论

相关推荐

    eclipse自带webservice调试工具介绍

    本文将详细介绍Eclipse自带的WebService调试工具,帮助开发者更高效地测试和调试WebService。 #### 二、Eclipse WebService调试工具概述 Eclipse中的WebService调试工具主要通过“WebService Explorer”提供,它是...

    webservice调试工具

    总结,Web服务调试工具是Web服务开发不可或缺的辅助手段,通过合理利用这些工具,开发者可以更高效地测试和优化Web服务,确保其稳定、可靠和高性能。选择合适的工具,并熟练掌握其使用,对于提升开发效率和保证服务...

    用友NC65-uapstudio webservice开发配置说明文档

    * soapUI工具的使用和配置 * Webservice的测试和调试 相关概念: * Webservice * UAPStudio * soapUI * WSDL * Webservice测试和调试 扩展知识: * Webservice的定义和类型 * Webservice的优点和应用场景 * ...

    Postman 在线测试webservice服务

    标题中的“Postman在线测试webservice服务”是指使用Postman工具对Web Service接口进行功能验证和性能测试的过程。Postman是一款强大的API开发、测试和文档工具,尤其适用于RESTful服务,但同样可以用来测试传统的...

    webservice调试工具SoapUI

    "webservice调试工具SoapUI"是指一种专门用于测试和调试Web服务的开源软件工具,名为SoapUI。这个标题明确指出SoapUI是针对Web服务的调试过程,帮助开发者验证和优化其Web服务功能。 【描述解析】 描述中的...

    WebService接口测试工具—Strom

    Strom是一款优秀的测试工具,专为开发者设计,用于快速、方便地对WebService接口进行验证和调试。在本文中,我们将深入探讨Strom的功能、优势以及如何使用它来提升你的测试效率。 1. **什么是WebService接口**: ...

    WEBSERVICE调试工具-ESB消息统一推送接口调用说明.doc

    本文档主要介绍了WEBSERVICE调试工具的使用,旨在帮助开发WEBSERVICE接口的同学更好地理解和使用ESB消息统一推送接口。该接口用于短信、微信等渠道的消息统一推送,提供了两种调用方式:动态库方式和WebService方式...

    WebService的优势与劣势

    5. **调试困难**:相比于传统的应用程序,调试WebService的问题往往更加复杂,需要专门的工具和技术支持。 6. **技术更新快**:随着Web技术的发展,新的协议和框架不断出现,这要求开发者持续学习和适应新技术。 ##...

    webservice测试调用工具WebServiceStudio

    通过使用WebServiceStudio这样的工具,开发者可以在开发阶段就发现并修复问题,提高服务质量和用户体验。 【应用场景】 1. **开发调试**:在开发Web服务的过程中,快速验证接口的正确性。 2. **集成测试**:在系统...

    WebService开发和使用指南

    WebService开发和使用指南 在IT领域,WebService是一种基于开放标准的、平台和语言无关的通信协议,用于在不同系统之间交换数据。它通过XML(eXtensible Markup Language)进行数据编码,使用SOAP(Simple Object ...

    Eclipse通过工具来监控webService请求和返回时的数据

    总结来说,本篇内容主要介绍了如何在Eclipse环境中使用WsExplorer和Tcp/IP Monitor这两个工具来调试Web服务,特别是SOAP协议的请求和响应,以及如何通过注解来定制Web服务的接口。这些知识对于Web服务开发者来说是...

    Axis2教程和java调用webservice的各种方法总结

    标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...

    新手学C#调用Webservice使用教程(使用环境VS2012)

    可以使用Visual Studio的内置调试工具来调试Web应用程序和服务,确保代码的正确性。通过不断测试各种输入值和边界条件,来确保WebService的稳定性和可靠性。 ### 总结 本教程介绍了在Visual Studio 2012环境下,...

    NC65开发webservice

    总结来说,NC65环境下使用UAP-STUDIO6.5开发和发布WebService涉及到多个步骤,包括插件安装、接口和实现编写、UPM配置、WSDL生成、调试设置以及客户端调用测试。这些步骤需要开发者对Java Web服务、UAP平台以及相关...

    windows mobile 6.0 基于WebService方式与PC Server通讯的demo

    开发者可以通过Visual Studio为Windows Mobile创建项目,并利用.NET CF中的System.Web.Services命名空间来调用和使用WebService。 在“WebServiceDemoMobile6.0”这个项目中,我们可能会看到以下几个关键组件: 1....

    webService(基于cxf)的完整例子

    例如,可以使用`@WebService`注解标记一个Java类为Web服务接口,并使用`@Path`注解来定义RESTful服务的URL路径。 4. **CXF服务部署**:CXF提供多种部署方式,包括独立服务器、Tomcat等应用服务器,以及Spring容器。...

    基于CFX开发WebService

    WebService接口定义了对外公开的服务方法,这些方法使用Java的JSR 181注解(如`@WebService`和`@WebParam`)进行标记。`@WebService`注解标记接口为一个Web服务,而`@WebParam`注解用于指定方法参数的元数据,如...

    个人总结的webservice jar包

    这个压缩包"个人总结的webservice jar包"包含了实现Web服务所需的一些关键库文件,对于理解和开发Java Web服务至关重要。 首先,我们需要了解Java中的WebService是如何工作的。在Java中,我们通常使用JAX-WS(Java ...

    用eclipse开发WebService图解

    总结来说,Eclipse为开发WebService提供了便利的工具和环境,从创建项目到调试服务,整个过程都可以在IDE内完成,大大提高了开发效率。通过学习和实践,开发者能够熟练地在Eclipse中构建和管理各种类型的WebService...

Global site tag (gtag.js) - Google Analytics