- 浏览: 341668 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zqb666kkk:
有示例代码吗
WebService CXF学习(高级篇3):WS-Security -
zhujiangtaobl0505:
楼主有源码没?发下,我邮箱465971531@qq.com,我 ...
WebService CXF学习(高级篇2):CXF+Spring+Hibernate -
ssy341:
http://localhost:8080/jforum/in ...
JForum安装详解 -
songzht:
看了上面的代码,这两个类型是怎么定义的?private Bas ...
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题) -
Getwaysun:
持久化类中使用boolean定义某个字段后,报Null val ...
null不能赋值给int类型,Integer可以。
由于没学习过.net,最近程序中需要调用.net的webservice接口得到一张图片。在网上找了好多资料选用的axis来实现调用。
首先看看.net实现Webmehod的两种方式,这两种方式java传参数的方式也有不同
1.rpc方式:
2.Document方式:
下面是java调用的代码
下面是接口描述文档
其中需要注意的是java在接受.net的webservice方法返回的是经过base64编码方式编码过的字符串,接收时需要将它转换为byte[]再生成图片。
还有一点我没搞明白的,也困扰我很久的就是.net的接口描述文档中的参数width和height是int类型,当我传入int类型时服务器会报错:Server was unable to read request。就是服务器无法读取请求。最后通过把这两个值转换为String类型传入解决问题,但原因还没搞清楚,希望那位是过来人的仁兄留言解释一下,不胜感激!
首先看看.net实现Webmehod的两种方式,这两种方式java传参数的方式也有不同
1.rpc方式:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] public class Service1 : System.Web.Services.WebService { [WebMethod] [SoapRpcMethod(Action = "http://tempuri.org/hello", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")] public string hello(String s) { return "Hello,"+s; } } }
2.Document方式:
namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] public class Service1 : System.Web.Services.WebService { [WebMethod] public string hello(String s) { return "Hello,"+s; } } }
下面是java调用的代码
package com.ctitc.analysis.util; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.rmi.RemoteException; import java.util.Date; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import sun.misc.BASE64Decoder; import com.ctitc.analysis.pojo.GisChartInfo; /* * 调用.net的webservice方法获取gis生成的图片地址 * * */ public class GetWebService { public String getWebService(String imagePath,GisChartInfo gisChartInfo) { String picUrl = ""; try { // WebService URL String url = "http://192.168.5.92/JttMapService/Service.asmx"; String namespace = "http://www.fzkcy.com/"; String method = "WebChartNew"; //创建调用服务 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); /*如果.net在提供Rpc服务时设置成[SoapRpcMethod(Action = "",.....则不需要再设置call.setUseSOAPAction和call.setSOAPActionURI*/
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://www.fzkcy.com/WebChartNew");
// 设置要调用的方法
call.setOperationName(new QName(namespace, method));
// 该方法需要的参数
call.addParameter(new QName(namespace,"layername"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"width"),XMLType.XSD_INT,ParameterMode.IN);
call.addParameter(new QName(namespace,"height"),XMLType.XSD_INT,ParameterMode.IN);
call.addParameter(new QName(namespace,"imageType"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"fieldnames"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"fieldvalues"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"rgbcolors"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"chartType"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"size"),XMLType.XSD_STRING,ParameterMode.IN);
//以下传参数方式为 Rpc方式
// call.addParameter("layername",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("width",XMLType.XSD_INT,ParameterMode.IN);
// call.addParameter("height",XMLType.XSD_INT,ParameterMode.IN);
// call.addParameter("imageType",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("fieldnames",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("fieldvalues",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("rgbcolors",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("chartType",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("size",XMLType.XSD_STRING,ParameterMode.IN);
// 方法的返回值类型
call.setReturnType(XMLType.XSD_STRING);
//设置参数
String layername = gisChartInfo.getLayername();
int width = gisChartInfo.getWidth();
int height = gisChartInfo.getHeight();
String imageType = gisChartInfo.getImageType();
String fieldnames = gisChartInfo.getFieldnames();
String fieldvalues = gisChartInfo.getFieldvalues();
String rgbcolors = gisChartInfo.getRgbcolors();
String chartType = gisChartInfo.getChartType();
String size = gisChartInfo.getSize();
Object[] parameters = new Object[]{layername,width+"",height+"",imageType,fieldnames,fieldvalues,rgbcolors,chartType,size};
// 调用该方法
byte[] imageBytes ;
BASE64Decoder dec=new BASE64Decoder();
imageBytes = dec.decodeBuffer(call.invoke(parameters).toString());
System.out.println(imageBytes);
//在指定位置生成图片
Date date = new Date();
picUrl = imagePath+date.getTime()+"."+gisChartInfo.getImageType();
FileOutputStream out = new FileOutputStream(picUrl);
System.out.println(imageBytes.length);
out.write(imageBytes ,0,imageBytes.length);
out.flush();
out.close();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return picUrl;
}
public static void main(String args[]){
GisChartInfo gisChartInfo = new GisChartInfo();
gisChartInfo.setLayername("地市行政区划");
gisChartInfo.setWidth(800);
gisChartInfo.setHeight(800);
gisChartInfo.setImageType("JPG");
gisChartInfo.setFieldnames("行政区划代码,县道,乡道,村道,专用道路");
gisChartInfo.setFieldvalues("3501,1791.561,2327.151,4659.821,9.656;" +
"3502,493.664,665.151,405.498,0;" +
"3503,676.446,981.887,3266.88,3.095;" +
"3504,1846.326,6357.708,3388.415,0;" +
"3505,1966.458,6469.783,4600.375,1.461;" +
"3506,1692.84,3526.773,3656.503,0;" +
"3507,1541.45,6636.189,3572.128,99.667;" +
"3508,1797.244,6723.257,1750.648,296.853;" +
"3509,1725.352,1903.754,4550.091,58.943");
gisChartInfo.setRgbcolors("0,92,230;132,0,128;56,168,0;255,128,0");
gisChartInfo.setChartType("BAR");
gisChartInfo.setSize("30,10");
System.out.println(new GetWebService().getWebService("d:/GisPictures/", gisChartInfo));
}
}
下面是接口描述文档
POST /JttMapService/Service.asmx HTTP/1.1 Host: 192.168.5.92 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.fzkcy.com/WebChartNew" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <WebChartNew xmlns="http://www.fzkcy.com/"> <layername>string</layername> <width>int</width> <height>int</height> <imageType>string</imageType> <fieldnames>string</fieldnames> <fieldvalues>string</fieldvalues> <rgbcolors>string</rgbcolors> <chartType>string</chartType> <size>string</size> </WebChartNew> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <WebChartNewResponse xmlns="http://www.fzkcy.com/"> <WebChartNewResult>base64Binary</WebChartNewResult> </WebChartNewResponse> </soap:Body> </soap:Envelope>
其中需要注意的是java在接受.net的webservice方法返回的是经过base64编码方式编码过的字符串,接收时需要将它转换为byte[]再生成图片。
还有一点我没搞明白的,也困扰我很久的就是.net的接口描述文档中的参数width和height是int类型,当我传入int类型时服务器会报错:Server was unable to read request。就是服务器无法读取请求。最后通过把这两个值转换为String类型传入解决问题,但原因还没搞清楚,希望那位是过来人的仁兄留言解释一下,不胜感激!
发表评论
-
编程精华资源大汇总
2014-04-19 18:43 747http://www.iteye.com/magazines/ ... -
PLSQL中汉字显示乱码问题
2013-04-07 16:15 0遇到问题: PLSQL中汉字显示乱码,并且SQL语句中 ... -
svnserver配置文件详解
2013-02-26 15:43 1400svnserve是SVN自带的一个轻型服务器,客户端通过使 ... -
启动tomcat报StandardServer.await: create[8005]
2013-02-19 11:15 1146启动tomcat报StandardServer. ... -
sqlserver数据库异常排查方法
2013-01-17 16:06 1722数据库系统异常是DBA经常要面临的情景,一名有一定从业经验的 ... -
js读取excel
2012-09-26 17:26 2244项目需要用到将excel中的数据导入到页面的文本框中,但并不想 ... -
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题)
2012-09-24 15:37 24481.导入需要的jar包(下载见附件) struts2-jfr ... -
sybase数据库夸平台恢复
2012-05-10 19:02 1978演示一次sybase ASE15.0.3跨平台备份恢复的过程。 ... -
sybase数据库恢复
2012-05-09 18:10 2765一、对tempdb的恢复 ... -
linux 压缩与解压 常用命令
2012-05-09 14:51 1613命令: tar 格式: tar 选项 文件目录列表 功能: ... -
linux远程上传文件及文件夹
2012-05-09 11:26 6591举例, 我要将本地文件夹/home/administrator ... -
liunx查看文件和文件夹大小
2012-05-09 11:23 1190当磁盘大小超过标准时 ... -
java里的split函数
2012-04-11 16:55 1007今天要用到split函数,对浮点数进行分割为子字符串,然后将结 ... -
java使用FTP上传下载的例子
2012-03-06 10:40 1586package mview.ftp; import ... -
linux虚拟机添加空间
2011-07-22 18:06 10641 、首先关闭虚拟机(这里如果不关闭系统,就不能增加新的硬件设 ... -
解决WebLogic启动时BEA-171522异常(启动时报classcast exception)
2011-05-10 14:28 2467如下异常: <Jul 27, 20 ... -
Enterprise Manager 无法连接到数据库实例
2011-04-26 10:26 2125登陆https://localhost:1158/em 之后, ... -
weblogic10配置线程数
2011-03-30 14:38 2514下面给介绍一下简单的调优,也是跟weblogic81不同的地方 ... -
忘记Weblogic,如何修改密码(10.3.2.0测试通过)
2011-03-29 18:09 1840忘记了weblogic server的管理员密码,可以通过如下 ... -
使用eclipse统计项目代码行数
2011-03-22 10:06 3172在eclipse中, 打开File Search对话框, ...
相关推荐
7. **处理响应**:根据WebService返回的结果进行相应的业务处理。 以上就是Android上传图片到.NET WebService的基本流程。在实际应用中,可能还需要考虑错误处理、网络连接状态检查、异步处理以避免阻塞UI线程等...
【文件名称列表】中包含的文件主要关于ASP.NET WebService的开发和使用,包括跨平台调用的示例和图片验证码服务的开发,这些都是Web服务应用的重要组成部分。 1. **ASP.NET WebService**:ASP.NET WebService是微软...
在这个场景中,我们将使用`KSOAP2`库来调用`webservice`,实现从Android设备上传图片到服务器的功能。以下是关于这个主题的详细解释。 ### 1. `KSOAP2`简介 `KSOAP2`是Android平台上一个轻量级的、用于调用SOAP...
C# Webservice是一种基于.NET框架的服务,可以通过SOAP协议与其他平台(如Android)进行通信。 首先,理解异步调用的概念至关重要。在Android中,由于UI线程不能执行耗时操作,否则会导致应用无响应(ANR)错误。...
例如,你可以将XML数据绑定到列表组件,当WebService返回新的数据时,列表会自动更新。 在提供的压缩文件中,"五分钟用Flex构建WebService应用—Flash教程.htm"可能是教程的详细内容,包含了具体步骤和示例代码。而...
如果这是一个完整的项目,那么它可能包括服务端代码(如Java的JAX-WS或.NET的ASMX)、客户端示例代码、以及可能的数据库连接和数据处理逻辑。 在实际开发中,使用WebService上传文件时,还需要考虑以下几点: 1. ...
复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用*/ package com.hx.mail; import java.io.File; import java.util.Map; import javax.mail.Message.RecipientType; /** * ...
同时,对于WebService,可能会使用.NET、Java、Python等语言的框架,如ASP.NET的ASMX或WCF服务,或者是PHP的SOAP库来创建和部署服务。 在"AjaxServer"这个文件或目录中,可能包含了以下内容: 1. HTML文件:展示...
压缩包中的资源包括两张图片,可能展示了Android应用界面或Web Service的调用示例,以及两个rar文件——"android.rar"和"webservice.rar"。这两个压缩文件可能包含源代码示例,帮助初学者更好地理解如何实现Android...
在实际开发中,通常会使用如Java的JAX-WS、.NET的ASMX或WCF等框架来简化SOAP的使用,它们自动生成符合SOAP规范的客户端和服务端代码。 总之,这份“webservice-soap资料”对于想要深入理解Web服务和SOAP协议的人来...
Web Service服务端可以使用多种技术实现,如PHP、Java的Spring Boot、ASP.NET等。这里我们主要讨论Java环境下的实现。 1. **SOAP与RESTful API**: 两种常见的Web Service协议。SOAP是基于XML的,结构严谨但复杂;...
本文将详细介绍如何使用`Ksoap2`在Android中连接`WebService`并上传图片。 首先,理解`SOAP`协议至关重要。`SOAP`是一种简单的基于XML的协议,用于在分布式环境中交换结构化和类型化的信息。`WebService`是基于`...
当HTTPService请求返回结果时,`loadImage`方法会被调用,将返回的图片数据赋值给`imageData`。 最后,优化图片加载和显示性能也是PicWatcher实例的重要部分。IFlex4提供了缓存机制,可以将加载过的图片保存在本地...
在`MainActivity.java`中,创建一个方法来调用这个服务,如下所示: ```java private void getWeatherInfo(String city) { // 设置SOAP请求的URL和方法名 String url = ...