讨论一下WebService传输文件

WebService设计之初也只是为了传输一些简单数据和基本数据类型的数据,当然用一些技术也可以实现WebService传输文件!比如以二进制流的方式,参数为byte[]... WebService设计之初也只是为了传输一些简单数据和基本数据类型的数据,当然用一些技术也可以实现WebService传输文件!比如以二进制流的方式,参数为byte[]的方式等。但个人觉得WebService传输小文件还行,大文件就显得又慢又容易出错。还不如用Socket等去实现!我看到IBM社区写到SOAP1.2可以捆绑附件,但网上也找不到相关的资料!很郁闷! 展开
 我来答
nggno1
2011-11-03 · TA获得超过351个赞
知道小有建树答主
回答量:768
采纳率:0%
帮助的人:421万
展开全部
当然可以传附件了、、。。。
axis用过吧?版本1就可以
将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户端上传文件到服务器)Axis服务的返回类型(从服务器端下载文件到客户端)进行传输。
1.服务端程序:

假设传输多个文件:在服务器端将文件取出来,并将文件封装在DataHandler数组中。
代码如下:

DataHandler[] ret = new DataHandler[totalFileNum];
... ...
java.io.File myFile = new java.io.File(filePath);
if(myFile.isFile() && myFile.canRead())
{
String fname = myFile.getAbsoluteFile().getCanonicalPath();
DataHandler[0] = new DataHandler(new FileDataSource(fname));
}
... ...

return ret;

2. 客户端的访问:

代码如下:
Service service = new Service();
Call call = (Call) service.createCall();

URL myURL = new URL("http://192.168.0.26:8080/axis/servlet/AxisServlet");
call.setTargetEndpointAddress(myURL); //设定服务的主机和位置
call.setOperationName(new QName("urn:MyAttachServer","echoDir")); //设置要调用的服务的方法
QName qnameAttachment = new QName("urn:MyAttachServer","DataHandler");

call.registerTypeMapping(DataHandler.class, qnameAttachment, JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class); //为附件(即DataHandler类)创建序列化生成器

call.addParameter("source", XMLType.XSD_STRING ,ParameterMode.IN); //设置服务调用方法的传入参数类型
call.setReturnType(XMLType.SOAP_ARRAY); //设置调用服务方法的返回类型,由于返回的是DataHandler数组,所以设置为SOAP_ARRAY类型
javax.activation.DataHandler[] ret = (javax.activation.DataHandler[])call.invoke(new Object[]{null}); //调用方法

for (i = 0; i < ret.length; ++i)
{
DataHandler recDH = ret[i];
java.io.File receivedFile = new java.io.File(recDH.getName()); //文件生成
}

3. 服务的部署:

注意:你要在部署的时候,定义DataHandler的序列化生成器。

编写deploy.wsdd文件:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="urn:att_STC_Server" >
<service name="urn:att_STC_Server" provider="java:RPC" >
<parameter name="className" value="samples.att_STC.att_STC_Server"/>
<parameter name="allowedMethods" value="echoDir"/>

<typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>

</deployment>

自己试试。
lw2016
2011-11-02
知道答主
回答量:30
采纳率:0%
帮助的人:21.8万
展开全部
webservice 是提供一个跨平台的条件。 我觉得大量数据传送用xml好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式