WebService 使用和调试小结
标题:WebService 使用和调试小结 作者:jrq 链接:http://blog.csdn.net/jrq/archive/2006/05/24/752174.aspx 内容: ??? 对WebService的使用和调试做一下记录。备忘。 ??? 因使用JB2005+AXIS 发布WebService,总有一些奇奇怪怪的问题,故使用JB9。
??? ? 2.新建Web Service--Web Services Configuration; ? 3.WebApp选择刚建立的Web Application的名字,其他默认; ? 4.建立WebService服务端的类(test.java)。 ??? ----------------------------- ??? public class test { ????? public test() { ????? public void setA(int x) { ????? public? void setB(int y) { ????? public int getSum() { ??? ----------------------------- ? 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”。 ? (二)使用 Delphi7 编写 WebService 的客户端 ? 1.新建Project & Application; ? 2.New-Other-WebService-WSDL Importer,选择WebService服务的WSDL描述文件,也可选择WSDL文件的URL; ? 3.单击“Finish”按钮,生成WSDL文件对应*.pas单元文件; ??? 其内容大致如下: ??? ------------------------------------------------------ ??? function Gettest(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): test;
??? function Gettest(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): test; ????? if (Addr = '') then ????? if HTTPRIO = nil then ????? try
??? end. ? 4.建议:保存由WSDL文件生成的*.pas单元文件时要重命名(webtest.pas),最好不使用默认名字; ? 5.Delphi7编写的WebService客户端调用代码: ??? ----------------------------- ??? var atest: test;? //test类 ??? ----------------------------- ? 6.注意 ?? 如果服务端类的属性没有加static描述,则Delphi7编写的客户端使用setA()、setB()后再getSum()时不能得到正确的结果。 ?? 因为WebService是无连接的,每次使用类方法时均得到一个新的对象应用,setA()、setB()后再getSum()操作不是针对同一个对象的。 ?? 但加上static后,所有的对象共同使用类的同一个值。如此即可。
?? 在服务端类的属性即使不使用static约束,在Delphi的客户端使用setA()、setB()后再getSum(),也是可以得到正确的返回值。 ?? 神奇。^_^
?? 本例只做测试和解决问题。如果要给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) { ??? ----------------------------- ? 8.注意 ??? 如果服务端类的属性没有加static描述,则JB编写的客户端使用setA()、setB()后再getSum()时亦不能得到正确的结果。 ??? 建议使用带参数的接口方法来传递参数数据。避免使用set方法。
??? Delphi7编写的客户端调用C#编写的WebService服务时,如果函数中传递的参数为汉字时,可能出现乱码现象。 ??? 在网上搜索了一些资料,找到解决办法:将HTTPRIO的UseUTF8InHeader属性改为true即可。 ??? 即编辑由WSDL文件生成的*.pas单元文件,在Get函数中增加一句:RIO.HTTPWebNode.UseUTF8InHeader:=True。 ??? ------------------ ????? try ??? ----------------
?????????????????????????????????????????????????????????????????????? ???????? ?????? ??by? jrq ??????????????????????????????????????????????????????????????????? ???????????? ?2006/05/24 凌晨 于穗 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |