【问题标题】:download of a large file from webservice causing application performance issue从 Web 服务下载大文件导致应用程序性能问题
【发布时间】:2016-10-27 16:34:28
【问题描述】:

我浏览过之前的帖子,也有人问过类似的问题,但我找不到解决问题的方法。 在我的应用程序中,用户可以下载文件,因此当用户单击下载时,我们的应用程序服务器在内部设置了与 Web 服务的经过身份验证的会话,该 Web 服务在 XML 响应中发送文件数据,如下所示:

<FileSerial xmlns="http://my.example.com/webservices">
  <filedata>base64Binary</filedata>
  <filesize>int</filesize>
  <filetype>string</filetype>
  <mime_type>string</mime_type>
</FileSerial>

我使用了 spring-ws 如下:

 GetDocResponse docResponse = (GetDocResponse) webServiceTemplate.marshalSendAndReceive(getDoc);
FileSerial fileSerial = docResponse.getGetDocResult();
fileByte = fileSerial.getFiledata();

在几个用户点击下载后,我们的应用服务器 JVM 内存变得非常高,应用服务器没有响应,必须重新启动。 我的猜测是 fileByte 存储在我的应用程序服务器内存中,这就是问题所在。

有没有办法直接流到客户端浏览器而不存储在应用服务器内存中。

任何示例代码都会有所帮助。

【问题讨论】:

    标签: java spring web-services spring-ws


    【解决方案1】:

    您正在堆上加载完整的文档,以及到 base64 的转换。如果您不使用引用复制,则从二进制数据到其他对象的每个映射都会在您的堆上创建另一个条目。

    您应该使用多部分请求并将文档作为 ws 请求的附件发送 MTOM example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多