当前位置:文档之家› webService网络服务调用总结

webService网络服务调用总结

webService网络服务调用总结
webService网络服务调用总结

网络服务调用总结

jacking

2013年10月29日

目录

快递通网络服务调用总结 (1)

WebServices简介 (2)

Webservices调用需要注意的问题(附案例) (2)

准备工作 (2)

相关jar包导入 (2)

相关权限添加 (3)

调用webService服务步骤 (3)

对调用过程的分析 (3)

自定义数据类型参数问题 (5)

带有自定义类型属性的自定义类型参数 (6)

自定义类型参数集合 (6)

由于项目涉及到网络通信(客户端与服务器端的数据交互),故此将之前学习到的关于网络通信的知识总结并分享给大家,如对文档中某些内容有异议,请及时沟通讨论。

通过学习了解到android的网络通信方式有含很多种,例如:基于TCP协议的网络通信、使用URL访问网络资源、使用HTTP访问网络、使用Web Services进行网络编程等等。本文档主要针对使用Web Services进行网络编程方式给以详细说明。

WebServices简介

Web services是一种部署在Web上的对象或者组件,能够通过Internet进行调用的应用程序。Web services 建立在以XML为主的开放的web规范技术基础上,其业务逻辑对调用者来说是透明的。

Webservices调用需要注意的问题(附案例)

接下来我们结合一个案例来理解整个调用过程,针对当时开发时遇到的问题,进行详细说明。附:表达能力有限,有很多东西讲的不是很清楚,请结合附带案例看此文档,希望能帮到你

准备工作

相关jar包导入

新建android项目,将ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar放在android 项目的lib目录下,检查jar包是否如下图所示:

如果不同,选中jar包右键->build path->add to build path即可。

相关权限添加

既然是访问网络操作,就需要添加访问网络的权限:

对AndroidManifest.xml文件进行修改,添加网络权限

,如下图所示:

否则Log日志会打印缺少权限,如图:

注意:这里只添加了网络权限,如果你的项目中还涉及到其他权限,请添加相应权限

调用webService服务步骤

第一步,指定Web Services的命名空间和调用的方法名

SoapObject rpc = new SoapObject(NameSpace,methodName);

第二步,设置需要调用的web Services接口需要传入的参数

rpc.addProperty(proPertyName,proPertyValue);

第三步,生成调用Web Services方法的SOAP请求信息,并制定SOAP的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOUt = rpc;

第四步,生成调用Web Services方法的HttpTransportSE实体对象

HttpTransportSE transport = new HttpTransportSE(ServiceURL);

第五步,调用call方法请求服务

Transport.call(soapAction,envelope);

第六步,获取服务端返回的数据

SoapObject object = (SoapObject)envelope.bodyIn;

第七步,解析返回的soapObject并获取需要的数据结果

String result = object.getProPerty(0).toString();

对调用过程的分析

注意1:第一步、第四步、第五步中,涉及到调用Web Services之前需要弄清楚”NameSpace”、”methodName”、”serviceURL”、”soapAction”。这些值需要从wsdl文档中寻找,如果想对wsdl文档深入学习,请参考wsdl学习文档,本文档只说明如何从wsdl文档中找到相应的值。

将服务端提供的url地址浏览器地址栏可以看到如下界面:

通过链接访问wsdl文档,可以看到当前wsdl文档应用的所得有命名空间,内容界面如下:

在此文档中,我们也可以找到我们需要的四个重要的属性值:

命名空间:找到wsdl:definitions节点,即wsdl的根节点,找到属性targetNamespace的值,即为我们所需的命名空间nameSpace的值,如图:

服务地址:找到wsdl:service节点,找到其子节点soap:address的属性location的值,即为我们所需的服务地址serviceURL的值,如图:

方法名和SoapAction:找到wsdl:operation节点,其属性name的值即为我们所需的方法名methodName的值,其子节点soap:operation的属性SoapAction的值即为当前我们所需方法所对应的soapAction的值,如图:

至此,调用webService服务所需的最基本的四个属性值获取完成。但调用的过程中一定要保证methodName与soapAction的一一对应关系。

注意2:第二步中,涉及到设置参数。通过wsdl文件中wsdl:types节点的子节点xsd:import 通过第一个URL获取到当前服务的所有方法、每个方法的所有参数及参数类型

通过第二个URL获取到当前服务所有能直接传递的数据类型,即基本数据类型

通过第三个URL获取到当前服务所有自定义类型的参数、参数的所有属性及属性类型

通过第一个URL访问到如下界面:

针对参数类型,如何判断参数是不是自定义参数类型呢?可以通过第二个URL跳转查看服务描述的所有基本数据类型,如下图:

若没有,通过第三个URL跳转查看服务描述的所有自定义类型,一一对应的关系,如果没有在当前链接里找到你所要了解的数据类型,那么这种数据类型即为复杂类型,或称自定义类型。需要对自定义类型的属性加以进一步了解,如下图:

若没有,可以询问服务端负责人员

自定义数据类型参数问题

针对这种自定义类型的参数,通过第二步中设置参数是达不到我们想要的效果的,服务端返回的信息为”服务器内部错误”等。那么这种情况我们该怎么解决呢?

下面拿上述TransferParams讲解一下:

第一步、在本地新建TransferParams.java文件,实现KvmSerializable 序列化接口。

第二步、将上图中TransferParams参数包含的所有属性按顺序声明,注意:一定要按顺序第三步、实现getProperty(int arg0)、getPropertyCount()、getPropertyInfo(int arg0,Hashtable arg1,PropertyInfo arg2)、setProperty(int arg0,Object arg1)方法。

getProperty(int arg0) 通过索引获取指定属性

getPropertyCount() 获取属性集合的大小

getPropertyInfo(int arg0,Hashtable arg1,PropertyInfo arg2)

获取指定索引的属性的名称和类型,注意:方法中第一件事是为参数设置命名空间setProperty(int arg0,Object arg1) 为指定的属性赋值

第四步、在调用过程中,添加本地数据类型与服务端数据类型的映射,通过addMapping()方法在调用webService服务的HttpTransportSE对象调用call()方法之前。

addMapping()方法有三个参数,分别是服务端的引用url、参数名和本地对应的类型。代码如下:envelope.addMapping(soapMapping, "TransferParams", TransferParams.class);

三个参数可通过自定义参数描述文件中xs:schema节点的targetNamespace属性值、xs:complexType节点的name属性值获取到SoapMapping和TransferParams两个值。

这样自定义类型的参数的问题也差不多能解决了。

带有自定义类型属性的自定义类型参数

但是此刻就又有问题了,你应该发现了此时自定义类型参数的所有属性都是基本数据类型,那如果此参数的某个属性也是自定义类型的,该怎么解决呢?解决方法与上述自定义类型的解决方法相似,就是新建java文件实现kvmSerializable序列化接口来描述自定义类型的属性,然后以普通属性的形式在自定义类型参数中声明。

自定义类型参数集合

到这里,自定义类型的参数问题已经解决了一半,剩下的一半是自定义类型参数集合。如果拥有自定义类型属性的自定义参数你理解了,那么这剩下的一半自定义类型参数集合就很容易了。这里你可以把集合想象成一个有且只有一个属性的参数,而此属性也为自定类型的。只是不同的是你在新建集合的java文件时,需要继承Vector,这里的E指的是集合中包含的参数类型。当然参数类型的映射仍需要添加。

最后,针对上面的资源用一个完整的案例帮助大家分析一下,所以请容我再啰嗦一遍

准备工作

2、修改activity_main.xml文件,添加三个按钮分别用于测试无参(基本数据类型)webServices

服务调用、自定义参数webServices服务调用、自定义参数集合webServices服务调用和一个用于显示结果的显示框,代码如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/textView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="hello world"

/>

android:id="@+id/simple"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="1"

/>

android:id="@+id/simplecom"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="2"

/>

android:id="@+id/comlist"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="3"

/>

布局不是很复杂,在此就不再赘述了。

3、新建负责调用服务的工具类WebServiceOp.java文件,代码如下:

package com.example.webservicetest;

import java.io.IOException;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Map.Entry;

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

import org.xmlpull.v1.XmlPullParserException;

public class WebServiceOp {

//命名空间

private static final String NAME_SPACE = "";

//服务地址

private static final String URL = "KdtService/basic";

//操作方法的名称

private static String methodName = "";

private static String soapMapping = "WebServiceManager";

private static LinkedHashMap paramMap;

private static TransferParams tran;

private static int flag = 1;

/**

* 公用方法

* @param methodname 方法名称

* @param paramMap 参数集合

* @return

* @throws IOException

*/

public static SoapObject LoadResult(String methodname,Map paramMap) throws IOException{

//创建soap对象,传入所需调用的webService的命名空间和webService方法名

SoapObject soapObject = new SoapObject(NAME_SPACE, methodname);

//创建SoapSerializationEnvelope对象,传入所需版本

SoapSerializationEnvelope envelope

= new SoapSerializationEnvelope(SoapEnvelope.VER11);

//创建HttpTransportSE对象,该对象用于调用webService操作

HttpTransportSE trans = new HttpTransportSE(URL,20000);

//判断参数集合是否为空

if(paramMap != null)

{

//将map中的参数放入迭代器中

Iterator> iter = paramMap.entrySet().iterator();

//遍历迭代器,为soap对象设置参数

while(iter.hasNext()){

Map.Entry me = iter.next();

soapObject.addProperty(me.getKey(),"".equals(me.getValue())?null:me.getValue());

}

//服务器端自定义类型的映射

switch(flag)

{

case 0:

break;

case 1:

envelope.addMapping(soapMapping, "TransferParams", TransferParams.class);

break;

case 2:

envelope.addMapping(soapMapping, "TransferParams", TransferParams.class);

envelope.addMapping(soapMapping, "ParamEnt", ParamEnt.class);

envelope.addMapping(soapMapping, "ArrayOfParamEnt", ArrayOfPEnt.class);

break;

case 3:

envelope.addMapping(soapMapping, "TransferParams", TransferParams.class);

envelope.addMapping(soapMapping, "ScanData", ScanData.class);

envelope.addMapping(soapMapping, "ArrayOfScanData", ArrayOfScanData.class);

break;

default:

break;

}

}

//创建的SoapObject对象设为SoapSerializationEnvelope的传出SOAP消息体envelope.bodyOut = soapObject;

envelope.setOutputSoapObject(soapObject);

//设置兼容.net服务器端

envelope.dotNet = true;

//使用调试功能

trans.debug = true;

try {

//调用操作对象call方法,将SoapSerializationEnvelope作为参数调用远程webService

trans.call(NAME_SPACE + "IKdtService/" + methodname, envelope);

System.out.println(trans.requestDump);

//调用完成,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个SoapObject对象,该对象代表webService的返回信息

SoapObject result = (SoapObject) envelope.bodyIn;

//打印Log日志信息

return result;

} catch (XmlPullParserException e) {

e.printStackTrace();

return null;

}

}

//无参调用

public static SoapObject serverTime() throws IOException

{

methodName = "ServerTime";

flag = 0;

return LoadResult(methodName, null);

}

//自定义类型参数调用

public static SoapObject register() throws IOException { //设置需要调用的服务器接口方法的名称

methodName = "Register";

tran = new TransferParams();

tran.setCompress(true);

tran.setDBType(0);

tran.setDefaultLogic(true);

tran.setEnterpriseID("Thinta");

tran.set(0);

tran.setPDAID("1000000");

tran.setStationID("900001");

//将自定义类型以参数形式放入map集合中

paramMap = new LinkedHashMap();

paramMap.put("param", tran);

flag = 1;

return LoadResult(methodName, paramMap);

}

//含有自定义类型参数集合的调用

public static SoapObject downLoad() throws IOException {

methodName = "Download";

tran = new TransferParams();

tran.setCompress(true);

tran.setDBType(0);

tran.setDefaultLogic(true);

tran.setEnterpriseID("Thinta");

tran.set(0);

tran.setPDAID("1000000");

tran.setStationID("900001");

ParamEnt p1= new ParamEnt();

p1.setTableName("SiteInfo");

ParamEnt p2 = new ParamEnt();

p2.setTableName("Employee");

ArrayOfPEnt aope = new ArrayOfPEnt();

aope.add(p1);

aope.add(p2);

paramMap = new LinkedHashMap();

paramMap.put("param", tran);

paramMap.put("list", aope);

flag = 2;

return LoadResult(methodName, paramMap);

}

}

对于这个类,需要啰嗦几句。

主要方法是LoadResult(String methodName, Map)方法,它主要负责调用服务。从上述标记红色的代码可以看出,其他方法在结尾时都调用了该方法,这样写主要是为了提高代码的复用性。我们发现每次调用时我们传递的第二个参数都是Map的子类LinkedHashMap类型,因为这样能保证参数存入Map集合中的顺序和参数从Map中取出来的顺序是一致的(因为参数的顺序会影响到xml信息的拼装,就可能导致服务端解析不了的错误),所以此处选择了具体的LinkedHashMap类型由于承载参数在类内部的传递。

然后我们讲解一下几个对应不同类型参数的方法:

无参的方法(serverTime)在此处代表了基本数据类型参数的调用服务和无参调用服务两种情况,由于基本数据类型在ksoap2中已经做了默认的映射,所以映射工作我们不必再做,只需要直接设置参数就行(只是需要参数名称与参数值要保证一一对应)。

自定义参数的方法(Register)在此处代表含有自定义参数的调用服务操作,这里的参数为TransferParams类型,针对这种自定义类型,我们需要映射,既然要映射,就需要服务器端和客户端的各自的类型,而此时只有服务器端对这个类型进行了定义,客户端并没有对这个类型进行定义,所以接下来的第一件事就是定义TransferParams类型。具体作法如下:4、新建TransferParams.java文件,实现KvmSerializable接口,代码如下:

package com.example.webservicetest;

import java.util.Hashtable;

import org.ksoap2.serialization.KvmSerializable;

import org.ksoap2.serialization.PropertyInfo;

public class TransferParams implements KvmSerializable{

private boolean Compress;

private int DBType;

private boolean DefaultLogic;

private String EnterpriseID;

private int ;

private String MD5;

private String PDAID;

private String StationID;

private String Version;

@Override

public Object getProperty(int arg0) {

switch (arg0) {

case 0:

return Compress;

case 1:

return DBType;

case 2:

return DefaultLogic;

case 3:

return EnterpriseID;

case 4:

return ;

case 5:

return MD5;

case 6:

return PDAID;

case 7:

return StationID;

case 8:

return Version;

default:

return null;

}

}

@Override

public int getPropertyCount() {

return 9;//参数的个数

}

@Override

public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) { //这个很重要

https://www.doczj.com/doc/3217860642.html,space=""; switch (arg0) {

case 0:

arg2.type=PropertyInfo.BOOLEAN_CLASS;

https://www.doczj.com/doc/3217860642.html,="Compress";

break;

case 1:

arg2.type=PropertyInfo.INTEGER_CLASS;

https://www.doczj.com/doc/3217860642.html,="DBType";

break;

case 2:

arg2.type=PropertyInfo.BOOLEAN_CLASS;

https://www.doczj.com/doc/3217860642.html,="DefaultLogic";

Pb调用Webservice

Pb调用Webservice 分类:PowerBuilder 2011-05-17 15:48 1436人阅读评论(0) 收藏举报webserviceprotocolsdocumentationsoapservicewizard 而现在WebService非常火,如果将两者结合起来呢,比如:用Net写好的WebService被Pb调用,而且还可以发布成接口形式,被其他公司所调用,合乐而不为呢? 先说一下开发环境:32位Win7旗舰版+PB11.5 其实在PB10.0出来时候,就已经支持调用WebService方式了。如下面步骤即可实现调用。 l 步骤1 在Net中创建一个WebService方法,用于被Pb调用,如图-1所示 图-1

l 步骤2 将此WebService发布,最好发布成IIS方式,如图-2所示。 图-2 这里有一点说明下,发布成IIS以后,是可以直接在浏览器里打开的,但它的后缀是asmx,而PB需要的是wsdl方式,就是说如何生成Wsdl文件?如下图-3所示,另存为即可并将这个文件存储起来。 图-3 好了,准备工作基本完成 l 步骤3 创建PB的解决方案文件,如图-4所示 图-4 这里面要必须引用一个pbwsclient11.pbd文件,不然,会调用不成功。这个文件在安装路径里就可以找到。 l 步骤4

从此步开始,我们按照创建对象创建一步一步操作即可,如下图列表所示 如图-5所示,选择Web Service Proxy Wizard图标

如图-6,这个选项勾不勾没有关系 如图-7,这个就要输入我们生成好的WSDL文件路径了(绝对路径) 如图-8所示,如果能到这里,就基本没有问题了

测试webService地址是否能够访问

通过COM组件测试webService地址是否能够访问 //适用于测试连接webService远程服务器 //引用Microsoft XML, v3.0 COM组件 //测试连接 privatevoid btnTestConn_Click(object sender, EventArgs e) { string strIP = txtServerAdddress.Text; if (!strIP.Contains("http://")) { strIP = "http://" + strIP; } string strProt = txtServerProt.Text; string strAddress = strIP + ":" + strProt + "/DataService?wsdl"; string urls = "http://192.168.1.7:8884/DataService?wsdl"; XMLHTTP http = new XMLHTTP(); try { http.open("GET", strAddress, false, null, null); http.send(strAddress); int status = http.status;

if (status == 200) { MessageBox.Show("成功"); } else { MessageBox.Show("连接失败。状态:" + status.ToString()); } } catch { MessageBox.Show("连接失败!"); } } 二、测试webService是否访问正常 //测试连接

Webservice接口开发

Webservice接口开发 Author:Geloin

目录 1 准备工作 (1) 2 服务器端 (1) 2.1 主程序 (1) 2.2 services.xml (2) 2.3 传值方式 (3) 2.4 打包 (4) 2.5 发布 (6) 3 客户端 (8) 3.1 导入包 (8) 3.2 示例代码 (8) 3.3 代码解析 (10) 3.3.1 设定服务器地址 (10) 3.3.2 设定action (10) 3.3.3 设定要调用的方法名 (11) 3.3.4 设定客户端控件 (11) 3.3.5 设定命名空间 (11) 3.3.6 设定需要传送的值 (11) 3.3.7 设定返回数据类型 (11) 3.3.8 获取返回结果 (12)

1准备工作 至https://www.doczj.com/doc/3217860642.html,/axis2/下载axis2的bin及war包,分别解压之,在环境变量中添加AXIS2_HOM,将axis2.war放置到tomcat/webapps目录下,启动tomcat,用浏览器打开http://localhost:8080/axis2,如下图所示: 2服务器端 2.1主程序 服务器端可以是任何一个程序,例如下面的例子: public class Test { // 此程序返回一个字符串 public String test1(String arg) { return arg + “测试”; } // 此程序返回一个一维数组 public String[] test2(String arg) { String[] result = new String[]{arg}; return result;

java调用WebService(客户端)

java调用WebService(客户端) 看下了网上大部分都是写java来编写WS服务端,小编这边就小写了下JAVA的调用端。WebService可以有Get、Post、Soap、Document四种方式调用,以下是四种方式的参照说明。 对于SOAP协议多写了个CXF的调用(对于CXF必须有以下包:) 以下是调用代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import https://www.doczj.com/doc/3217860642.html,.URL; import https://www.doczj.com/doc/3217860642.html,.URLConnection; import https://www.doczj.com/doc/3217860642.html,.URLEncoder; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; /** * 功能描述:WebService调用 * */ public class ClientTest {

/** * 功能描述:HTTP-GET * */ public String get() { URL url; BufferedReader bin = null; StringBuilder result = new StringBuilder(); try { String urlTemp = "https://www.doczj.com/doc/3217860642.html,//WebServices/WeatherWebService.asmx/getSupportCity?byProvin ceName=" + URLEncoder.encode("福建", "UTF-8");// URLEncoder用来参数编码url = new URL(urlTemp); InputStream in = url.openStream(); // 请求 bin = new BufferedReader(new InputStreamReader(in, "UTF-8")); String s = null; while ((s = bin.readLine()) != null) { result.append(s); } } catch (Exception e) { e.printStackTrace(); } finally { if (null != bin) { try { bin.close(); } catch (IOException e) { e.printStackTrace(); } } } return result.toString(); } /** * 功能描述:HTTP-POST * */ public String post() { OutputStreamWriter out = null; StringBuilder sTotalString = new StringBuilder(); try { URL urlTemp = new URL(

XMLWebService完全实例详细解析

XMLWebService完全实例详细解析 首先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据. webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论XML数据的传输. 有了一些对XML webservice的初步了解后,我们将切入正题,即是用一个具体的webservice事例的形式来讲解具体的webservice用法,用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧. 这里,我们将以一个简单的分布式课件搜索系统为例来讲解.使用VS2003为编译环境,C#为语言,SqlServcer2000为数据库.(这个例子来源于一位网上朋友的文章的启发,觉得很能代表webservice的特点,就按那个想法做了这么个系统来示例了) 首先,明确我们要做什么.我们需要一个对客户的接口,也就是个站点,我们把它称做ServiceGatherSite,它是何种形式都无所谓,甚至它本身并不需要数据库,它只是提供给用户一个查询的接口,真正的服务,普通用户是不接触到的.然后,这里我们还需要若干个提供服务的站点,我们可以称它们为资源站,这里为简单起见,假设有两个资源站,分别叫WebSiteA,WebSiteB,它们可以是不对外公布的,只是为了丰富查询数据而存在.最后,是我们最需要关注的东西---资源站提供给ServiceGatherSite的服务.两个资源站,就有两个服务,我们称为SiteAService和 SiteBService.两个服务间没有任何关系,内部提供的方法也完全没关联,只是需要把方法如何使用告诉ServiceGatherSite,意思是,服务只提供查询接口,返回的数据如何处理,服务本身并不管,全由使用服务的站点分配. 写了这么多,算是简要的介绍了下有关XML webservice的概念和我们这个例子的结构,下篇文章,我们将开始真正进入代码的设计阶段. 上篇文章介绍了些webservice的基本特性和我们例子的结构,这篇文章我们将开始具体的代码编写工作.

SAP开发webservice接口教程

SAP开发webservice接口教程 在client=100中进行开发: 1.创建RFC函数 SE80,在函数组下,右击->创建,创建函数模块,填写函数模块名称及描述。 2.函数属性标签页,选择“远程启用的模块”,其余默认不变。 3.函数导入标签页,需要添加调用时传入的参数(表),“传递值”需勾选。 表类型:ZSHR_EMPLOYEER_T (需要自己创建) 行类型:ZSHR_EMPLOYEER (需要自己创建)

4.函数导出标签页,需要添加调用返回的参数(表),“传递值”需勾选。 表类型:ZSHR_EMPLOYEER_OUT_T (需要自己创建) 行类型:ZSHR_EMPLOYEER_OUT (需要自己创建) 5.函数源代码标签页,需要写代码实现把传入的数据保存在透明表中。 至此,函数创建完成。 6.创建Web Services 右击包名创建企业服务,进入如下页面,选择“Service Provider”,因为我们是服务提供者,点击“继续”。

7.选择“Existing ABAP Object (Inside Out)”,点击“继续”。 8.给服务起名,并填写描述,点击“继续”

9.选择“Function Module”,点击“继续”。 10.填写我们第一步创建的函数,并勾选“Map Name”,点击“继续”。 11.SOAP Appl默认不变,Profie下拉框选择第四个选择,即不进行权限认证。点击“继续”。 12.填写对于的包和请求,点击“继续”。 下一步,直接点击“完成”。服务创建成功。

13.配置SOA 使用T-CODE:soamanager,进入web页面的SOA管理(client=100)。 14.点击“简化Web服务配置”,进入如下设置页面,点击“执行”,从列表中找到自己创建的 服务,勾选第一个checkbox,User Name/Password(basic),点击列表左上角的“保存”,之后页面右上角的“返回”按钮,返回首页。 这一步设置,代表我们只设置用户名/密码的调用认证方式。

C#调用WebService实例和开发

C#调用WebService实例和开发 一、基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。简单的理解就是:webservice就是放在服务器上的函数,所有人都可以调用,然后返回信息。比如google就有一个web service,你调用它就可以很容易的做一个搜索网站。就像调用函数一样,传入若干参数(比如关键字、字符编码等),然后就能返回google检索的内容(返回一个字符串)。其中, Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。 WSDL:(Web Services Description Language)WSDL文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。 UDDI(Universal Description,Discovery,and Integration)是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP 消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。 二、优点缺点 Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service完全基于XML(可扩展标记语言)、XSD(XML Schema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。因此使用Web Service有许多优点: 1、跨防火墙的通信 如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,

【WebService】接口的测试方法

【WebService】接口的测试方法 有以下多种方式: 一、通过WSCaller.jar工具进行测试: 前提:知道wsdl的url。 wsCaller可执行程序的发布方式为一个wsCaller.jar包,不包含Java运行环境。你可以把wsCaller.jar复制到任何安装了Java运行环境(要求安装JRE/JDK 1.3.1或更高版本)的计算机中,用以下命令运行wsCaller: java -jar wsCaller.jar 使用wsCaller软件的方法非常简单,下面是wsCaller的主界面: 首先在WSDL Location输入框中输入你想调用或想测试的Web Service的WSDL位置,如“https://www.doczj.com/doc/3217860642.html,/axis/services/StockQuoteService?wsdl”,然后点“Find”按钮。wsCaller就会检查你输入的URL地址,并获取Web Service的WSDL信息。如果信息获取成功,wsCaller会在Service和Operation下拉列表框中列出该位置提供的Web Service服务和服务中的所有可调用的方法。你可以在列表框中选择你要调用或测试的方法名称,选定后,wsCaller窗口中间的参数列表框就会列出该方法的所有参数,包括每个参数的名

称、类型和参数值的输入框(只对[IN]或[IN, OUT]型的参数提供输入框)。你可以输入每个参数的取值。如下图: 这时,如果你想调用该方法并查看其结果的话,只要点下面的“Invoke”按钮就可以了。如果你想测试该方法的执行时间,则可以在“Invoke Times”框中指定重复调用的次数,然后再按“Invoke”按钮。wsCaller会自动调用你指定的方法,如果调用成功,wsCaller会显示结果对话框,其中包括调用该方法所花的总时间,每次调用的平均时间和该方法的返回值(包括返回值和所有输出型的参数)。如下图:

NET调用WebService服务的方法详解!

本文实例讲述了https://www.doczj.com/doc/3217860642.html,调用WebService服务的方法。分享给大家供大家参考,具体如下: 一、WebService:WebService是以独立于平台的方式,通过标准的Web协议,可以由程序访问的应用程序逻辑单元。 (1)应用程序逻辑单元:web服务包括一些应用程序逻辑单元或者代码。这些代码可以完成运算任务,可以完成数据库查询,可以完成计算机程序能够完成的任何工作。 (2)可由程序访问:当前大多是web站点都是通过浏览器由人工访问的,web服务可以由计算机程序来访问。 (3)标准的we协议:Web服务的所有协议都是基于一组标准的Web协议,如HTTP、XML、SOAP、WSDl、UDDI等 (4)平台独立性:web服务可以在任何平台上实现。因为标准协议不是由单个供应商专用的,它由大多数主要供应商支持。 SOAP(Simple Object Access Protocol,简单对象访问协议)协议:是用于交换XML编码信息的轻量级协议,SOAP协议是HTTP和XML协议的组合。 WSDL(Web Service Description Language,Web服务描述语言)是用XML文档来描述Web 服务的标准,是Web服务的接口定义语言。 二、创建https://www.doczj.com/doc/3217860642.html, WEB服务 建立Web服务就是把一些信息或逻辑对其他计算机和客户公开,进一步说,就是从支持SOAP通信的类中建立一个或多个方法。 创建Web服务的步骤:(VS2008) 首先,新建一个网站。选择文件-------->新建--------->网站,打开“新建网站”对话框,选择“https://www.doczj.com/doc/3217860642.html, web服务”模板。确定后,创建成功。 创建好后,会生成Service.asmx,其代码隐藏文件Servece.cs位于App_Code文件中。Web服务文件都使用扩展名.asmx。 发现在VS2010中,创建web服务是先新建一个网站,在选择添加新项,然后选择web 服务。 三、使用https://www.doczj.com/doc/3217860642.html, Web服务 (1)添加Web引用 1、新建网站,右键单击网站根目录,选择“添加Web引用”项。 2、在“添加Web引用”对话框中,在URl列表框中选择或者填入Web服务的URL。(.asmx 文件路径)然后在“添加Web引用”文本框中填入希望在应用程序中使用的添加Web引用名。

webservice四种发布方式及客户端调用

WebService 四种发布方式总结 Author:yczhang 1.CXF方式 CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为:https://www.doczj.com/doc/3217860642.html,ng.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。该问题在此处做个记录,以后使用cxf与was的时候需要注意!!! 使用cxf+spring搭建WebService: 第一步,添加jar包。此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包: 而泰康的was环境则需要如下jar包:

明显的多了很多,原因应该是服务器jar包池的不同。根据错误提示缺什么补什么就可以了,注意jar包勿重复。 第二步,配置web.xml文件,如下(重要的地方已标记): contextConfigLocation classpath:/applicationContext.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFil ter encoding UTF-8 encodingFilter /* CXFServlet org.apache.cxf.transport.servlet.CXFServlet 1 CXFServlet /webservice/* 上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;

Delphi调用WebService的实例(非常经典)

Delphi 调用webservice 经典实例 Dispatch: 派遣,分派 Invoke: 调用 Invokable: 可调用接口 TReomtable: WebService中自定义类都是继承自该类 TSOAPAttachment: Attachment:附件,一种流类型,可以返回流数据 CGI:(EXE) ISAPI:(DLL) Base64编码: uses EncdDecd; s := EncodeString(s); //加 base64 编码 s := DecodeString( str ); //解码 UTF8: UTF8 是8位的UNICODE字符,而ASCII是7位 ,gb2312和unicode是2字节/字,utf8是3字节/字utf8类似以前的8位转7位的编码,是为了在网络间不同系统的通讯方便而作的转换。几乎所有用.Net写的WebService只支持DOC方式、Delphi写的只支持RPC方式;J2ME目前对Web Service的支持仅限于RFC172,而 RFC172要求必须为DOC方式(sun怎么偏袒MS?)! 为了在设计中减少障碍,下面还介绍几个概念。 1) SOAP:SOAP是一种简单有效的数据传输协议,用于分布式网络环境下数据信息交换,它以XML 作为数据传输的格式,搭配Internet上标准的传输协议HTTP、SMTP、TCP等来传送信息。从本质上看,SOAP事实上只是将Request和Response经由XML格式把数据打包,达到双方沟通的目的。 2) WSDL:WSDL(Web Service Description Language)是一种以XML格式描述的Web Service语言,当Web Service Provider 要对外公布提供的 Web Service,就需要通过WSDL来构建描述语言。在WSDL中有两个非常重要的要素::此WSDL文件所要描述的Web Service集合;每一个Port代表外界Client可以和此Service沟通的一个进入点,一个Port会指定一个Binding方式。 3):处理中文乱码的问题: 将HttpRio的 Converter 的 Options 的 soUTF8InHeader 设为 True 将生成soap消息的HTTPSoapDispatcher控件,添加encoding为gb2312 https://www.doczj.com/doc/3217860642.html,eUTF8InHeader := True; 4)在Delphi中,能够传递的自定义类型的对象要继承TRemotable, 5:修正一个服务器端的一个Bug:将ISAPIThreadPool和ISAPIApp的次序变一下:ISAPIApp必须在 ISAPIThreadPool之前: uses ... ISAPIApp, ISAPIThreadPool 解决如下错误: Received content of invalid Content-Type setting:text/html -SOAP"expects"text/xml" 6:"XML document must have a top level element. Line: 0" 错误,我该如何解决??哈纳斯 (2002-08-05 17:26:00) 我也曾碰到同样的问题解决方法是:别设httprio的wsdllocation,设它的url 如http://localhost/mydir/project1.exe/wsdl/IFIRST mydir是你的可执行的虚拟目录,IFIRST是你定义的接口名 ********************************************************************* **************************

在VC中调用WebService

在VC中调用WebService 作者:叶小舟 下载源代码 一、什么是WebService ? WebService 其实就是一个基于网络的应用程序,它向外部程序提供一定的调 用接口。外部(远程)的程序,可以经由Web对其进行调用。 二、WebService 的特性: 1.由于WebService 经由web服务器发布,所以比DCOM而言,可以顺利穿过防火墙。这也是WebService 的优点之一,可以说,WebService ,为分布式应用的开发,提供了一个很好的平台。 2.对WebService 的调用,是通过SOAP协议进行的。简单对象访问协议(SOAP)提供了标准的远程过程调用(RPC)方法来调用Web service。而SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式,因此,对WebService 的调用也可以是跨平台的。、 三、怎样调用WebService ? Visual https://www.doczj.com/doc/3217860642.html, 内建提供了对WebService 的调用。在https://www.doczj.com/doc/3217860642.html,中,调用WebService 只需要简单的几个步骤即可。只要找到WebService 的发布地址,将地址引入到VC工程中。这时,编译器会预先编译一次,自动生成和WebService 相关的头文件(也可以叫Web代理文件)WebService .h。在你的程序中,包含WebService .h然后生成相关的对象,就可以对远程的WebService 进行调用了。 为演示怎样调用WebService ,我们用网上一个已经发布的WebService ,名字叫TranslateService,其功能是对多种语言进行互相翻译。这个WebService 的地址如下:https://www.doczj.com/doc/3217860642.html,/TranslateService.asmx 四、程序示例 1.基于控制台的托管程序示例

ESB部署WebService接口(统一用户和待办)

1统一待办(WebService方式) 1.1概述 门户系统做为用户访问各集成应用系统的统一入口,用户访问企业内部信息资源时只需要登录到门户系统,就可使用门户系统集成的各个应用,而待办做为各系统中用户需要处理的工作,门户系统需要提供收集建投内部应用系统中产生的待办信息,并且进行统一展现的功能,即统一待办功能。 统一待办应用业务涉及到的系统其中包括本期门户系统建设过程中所需集成的OA、WCM、EAM系统。 为保证门户系统接入各应用系统待办信息的规范性,现就各应用系统接入实现做统一要求,以确保门户系统统一待办功能实现的规范性、重用性及安全性。不满足本技术方案提供的接入规则的相关应用系统,应参考本文档完成对应用系统改造后方可进行门户系统统一待办接入工作。 统一待办实现共分为以下部分: 系统待办信息获取 系统待办信息展示 系统待办信息处理 1.2待办信息获取 设计思路:应用系统通过门户系统提供的webservice接口向门户系统统一待办系统库写入代表信息,如下图

数据获取设计示意图 步骤如下: 1.应用系统需获得最新的待办信息。 2.应用系统通过门户接口,将获得的最新待办信息发送到门户系统。 3.统一待办系统将应用系统提供的待办信息展示给用户。 4.应用系统通过调用集成接口后获得信息,可以判断发送信息操作是否正常。 1.3待办信息展示 设计思路:应用系统将最新的待办信息发送到统一待办系统中,并最终展示到门户首页上的待办栏目上,如下图 用户 待办栏目页面 待办集中展示设计示意图 场景如下:

在所有的待办类标题前加上”请办理”,待阅类标题前加上”请审阅”。此外,如果信息是未办或者未阅,用红色表示 1.4待办信息处理 设计思路:用户点击门户系统上“待办栏目”里的一条待办时,弹出一个新页面,首先同应用系统实现SSO,然后跳转到应用系统的待办页面,完成待办处理后,由应用系统调用门户接口通知门户系统,并关闭弹出的待办处理页面,门户系统负责即时刷新门户待办页。如下图: 待办信息集中处理设计示意图

使用javascript调用webservice示例

使用javascript调用webservice示例 再javascript中使用soap调用webservice的示例代码 代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题 此代码原型来源于https://www.doczj.com/doc/3217860642.html,/的javascript soapclient 发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c# (再例子中使用的mootools.v1.11.js 文件,做过修改) 客户端js调用代码如下 js 代码 1.function ajaxRequest() 2. { 3.var url = "http://localhost:88/webservicedemo.asmx"; 4. 5.//设置webService传入参数 6.// 7.//注意: 8.// 9.// 调用.Net 写的webservice(如例子中的 webservicedemo.asmx) 10. // HelloTo(String name) 针对name参数必须 写成 wqj,还有更多参数一样写,使用名称匹配 11. // 传入的参数数量可以不等于(多于或少于)方法 要求的参数 12. // 13. // 调用java(xfire) 发布的webService 14. // 传入的参数必须与调用方法的参数数量相等,且 按传入值的顺序进行匹配 15. // 16. 17. var para = "wqj"; 这里应该是一个标准的xml形式,源码贴出 来时被虑掉了,请参看附件源码 18. 19. var op = {

C# 调用webservice 传递实体对象

C# 调用webservice 传递实体对象 在webservice端公开一个实体类,然后实例化,赋值,然后再给到webservice,可以实现,但是,即使调用端和service端的实体类完全一致,你也要重新实例化service端的,重新赋值,将此传回service端。因为,C#是强类型的语言。 当然,你也可以通过下面的方法传递实体类,而不用太纠结于赋值了。 在调用端序列化实体对象(实体对象须是可序列化的类): public static byte[] SerializeObject(object pObj) { if (pObj == null) return null; System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, pObj); memoryStream.Position = 0; byte[] read = new byte[memoryStream.Length]; memoryStream.Read(read, 0, read.Length); memoryStream.Close(); return read; } 在service的调用方法中,接受一个byte[] 参数即可,然后反序列化: public object DeserializeObject(byte[] pBytes) { object newOjb = null; if (pBytes == null) { return newOjb; } System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(pBytes); memoryStream.Position = 0; BinaryFormatter formatter = new BinaryFormatter(); newOjb = formatter.Deserialize(memoryStream); memoryStream.Close(); return newOjb; } 然后将object强制转换成相应的实体类型,就可以直接使用此对象了。 注:在调用端和service端都引用了同一版本的实体程序集.

第一个webservice例子

第一个的webservice实例 超简单,才5步 1> 获取axis及关联的jar包 https://www.doczj.com/doc/3217860642.html,/topics/download/6a76de1e-d506-35bc-a41b-508d4be04025 2> 新建一个模拟服务java类 package server; public class SayHello { public String getName(String name) { return "你好," + name; } } 3> 在web.xml 下新增一个servelt AxisServlet org.apache.axis.transport.http.AxisServlet AxisServlet /services/* 4> 在web项目的web.xml 同目录新建文件server-config.wsdd,自己改改

学习CXF WebService入门实例一

最近开发开始学习Web Service,如果你是大神,请路过!谢谢!遵循前辈大神们的教导~~~,内事不决问度娘,外事不决问谷歌(现在谷歌已经不能用了),只能问度娘了!上网一百度,套用周董的一句歌词,霍,霍,霍,霍,这么多的套路(axis,axis2,XFire,CXF等),我到底选择哪一个?因为要和Spring进行对接,看了一下,CXF与Spring的耦合度最好,于是就选择了CXF。上官网下jar包,下了最新的apache-cxf-3.1.4.zip包。解压出来,看看里面的最简单的实例,apache-cxf-3.1.4\samples\java_first_jaxws,本着你快乐所以我快乐加上不要脸的原则,我抄抄抄,改了一下名字,开发环境jdk1.6, jdk1.5没试过,上眼呐! 新建工程mywbs,导入jar包 cxf-core-3.1.4.jar jetty-continuation-9.2.11.v20150529.jar jetty-http-9.2.11.v20150529.jar jetty-io-9.2.11.v20150529.jar jetty-server-9.2.11.v20150529.jar jetty-util-9.2.11.v20150529.jar wsdl4j-1.6.3.jar xmlschema-core-2.2.1.jar 一、接口类IHelloWorld.java package com.ws.hello; import java.util.List; import javax.jws.WebService; import https://www.doczj.com/doc/3217860642.html,ers; @WebService public interface IHelloWorld { public String sayHello(String name); public String getUserName(Users user); public List getListUser(); } 二、实现类(说明endpointInterface = "com.ws.hello.IHelloWorld",IHelloWorld 类加上路径,此处注意)HelloWorldImpl.java package com.ws.hello; import java.util.ArrayList; import java.util.List; import javax.jws.WebService; import https://www.doczj.com/doc/3217860642.html,ers; @WebService(endpointInterface = "com.ws.hello.IHelloWorld",serviceName = "IHelloWorld", portName="IHelloWorldPort") public class HelloWorldImpl implements IHelloWorld { @Override public String sayHello(String name) { return name + ": 您好啊!";

相关主题
文本预览
相关文档 最新文档