四种客户端调用WEBSERVICE

mousefat

贡献于2012-06-25

字数:10814 关键词: WEB服务/RPC/SOA

 四种客户端调用WEBSERVICE 王凡 Woshiwangfan@gmail.com Wf141732@sohu.com 2009-08-22 目录 1. 文档概述 2 1.1. 相关文档 2 2. SERVER端 3 2.1. 代码 3 2.2. SERVER端生成Wsdl 4 2.3. 服务端安全性设置 6 3. VB调用 7 3.1. 准备 7 4. .net调用 10 4.1. 实现过程 10 5. Axis2调用 11 5.1. Axis2的安装 11 5.2. Axis2调用过程 11 6. Weblogic调用 15 6.1. Weblogic 15 Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 7. 已解决及未解决的问题 18 7.1. 未解决的问题 18 7.2. 已解决的问题 18 Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 1. 文档概述 1.1. 相关文档 《Web Services开发教程.doc》 2. SERVER端 这个主要是用weblogic的workshop开发,用weblogic开发webservice具体可见沈辉的《Web Services开发教程.doc》,这里 主要是讲客户端调用,所以服务端只作罗列。 2.1. 代码 在weblogic中构建webservice可以见《Web Services开发教程.doc》,用于本次测试的Server代码如下: Model: package cn.com.tsingtao.logistics.model; import java.io.Serializable; public class test implements Serializable { private static final long serialVersionUID = 1L; private String NAME; private int AGE; public void setNAME(String name) { NAME=name; } public void setAGE(int age) { AGE=age; } public String getNAME() { Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc return NAME; } public int getAGE() { return AGE; } } Service代码如下: public cn.com.tsingtao.logistics.model.test[] hello(String NAME,int AGE) { cn.com.tsingtao.logistics.model.test[] t=new cn.com.tsingtao.logistics.model.test[10]; for(int i=0;i<10;i++) { t[i] = new cn.com.tsingtao.logistics.model.test(); t[i].setNAME(NAME+i); t[i].setAGE(AGE+i); } return t; } 2.2. SERVER端生成Wsdl 在Server端生成的wsd如下: Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 2.3. 服务端安全性设置 这个是根据沈辉的《Web Services开发教程.doc》设置的,不作详细说明,只作罗列 2.3.1. 在weblogic中新建用户和用户组 Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 2.3.2. 在webapp中配置安全性 在web-info\web.xml中添加红色部分 BSM index.html index.htm index.jsp default.html default.htm default.jsp wsuser Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Secure Area /* GET POST wsuser BASIC myrealm 在web-info\weblogic.xml中添加红色部分 10.3 BSM wsuser wsgroup 重新发布后在浏览器中就可以看到了 Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 3. VB调用 3.1. 准备 使用vb6.0调用webservice需要用到SOAP Toolkit,我们选用的是SOAP Toolkit3.0版本。 3.1.1. 插件下载 到http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&displaylang=en下载SOAP Toolkit 3.0,直接安装。 3.1.2. VB中添加引用 在VB中添加对插件的引用Project\References\ Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 添加如下5个引用 3.1.3. 程序代码 VB调用的程序代码如下: Private Sub Command3_Click() Dim Serializer As SoapSerializer30 Dim reader As SoapReader30 Dim Connector As SoapConnector30 Dim strParam As String strParam = "王凡" 'namespace Const SoapAction = "http://cn/com/tsingtao/logistics/service" 'wsdl地址 Const END_POINT_URL = "http://localhost:7001/BSM/test?WSDL" '新建一个connector对象 Set Connector = New HttpConnector30 Connector.Property("EndPointURL") = END_POINT_URL Connector.Connect Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Connector.Property("SoapAction") = SoapAction ‘在weblogic中我们使用的是basic认证,在这里添加用户名和密码 Connector.Property("AuthPassword") = "wsuserwsuser" Connector.Property("AuthUser") = "wsuser" Connector.Property("WinHTTPAuthScheme") = 1 Connector.BeginMessage Set Serializer = New SoapSerializer30 Serializer.Init Connector.InputStream Serializer.startEnvelope Serializer.startBody ‘在这里添加传入的参数,有两个参数NAME和AGE,前面的是方法名,后面的为namespace,在wsdl中标红色的部分。 Serializer.startElement "hello", "http://cn/com/tsingtao/logistics/service" Serializer.startElement "NAME" Serializer.writeString strParam Serializer.endElement Serializer.startElement "AGE" Serializer.writeString 12 Serializer.endElement Serializer.endElement Serializer.endBody Serializer.endEnvelope Serializer.Finished Connector.EndMessage ‘reader读入返回的xml对象 Set reader = New SoapReader30 reader.Load Connector.OutputStream If Not reader.Fault Is Nothing Then MsgBox reader.faultstring.Text, vbExclamation Else Dim results As Variant results = getResult(reader) For i = 0 To UBound(results) - 1 MsgBox "Name:" + results(i).Item("NAME") + "," + "Age:" + results(i).Item("AGE") Next i End If End Sub Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc ‘这个函数将返回的对象组合成一个array Function getResult(reader As SoapReader30) As Variant Dim arr() As Object ReDim arr(reader.RPCResult.childNodes.length) Dim dict For i = 0 To reader.RPCResult.childNodes.length - 1 Set dict = CreateObject("Scripting.Dictionary") For j = 0 To reader.RPCResult.childNodes(i).childNodes.length - 1 dict.Add reader.RPCResult.childNodes(i).childNodes(j).baseName, reader.RPCResult.childNodes(i).childNodes(j).Text Next j Set arr(i) = dict Next i getResult = arr End Function 4. .net调用 4.1. 实现过程 4.1.1. 在.net中添加webservice引用 在Solutions Explorer\project_name\Web References Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc 4.1.2. 调用代码 .net的代码很简单 testService.testService request=new WebServiceT.testService.testService(); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(request.Url), "Basic", new NetworkCredential("wsuser", "wsuserwsuser")); request.Credentials = cache; testService.test[] ts=request.hello("wangfan",12); for(int i=0;i/server/lib目录下,解压缩wseeclient.zip到一个目录中 2. 选择项目,右键打开属性对话框,在ClassPath标签页中,删除"WebLogic System Library" 3. 单击"Add External Jars",将第一步解压的所有jar都添加进行 4. 添加ant的类库到项目中 5. 重新运行上面的客户端调用代码,此时执行就能正确 6.1.3. 代码实现 HttpTransportInfo info = new HttpTransportInfo(); info.setUsername("wsuser".getBytes()); info.setPassword("wsuserwsuser".getBytes()); TestService_Impl im=new TestService_Impl("http://127.0.0.1:7001/BSM/test?WSDL",info); Weblogic调用 File Ref: F00ee12826737a5a633efb72846bc3f3.doc Test_Stub t=(Test_Stub) im.getTestSoapPort(); ArrayOftest_Literal tl=t.hello("wangfanwf", 12); Test[] ts=tl.getTest(); for(int i=0;i

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档