【问题标题】:Domino web service provider limitationDomino Web 服务提供者限制
【发布时间】:2017-12-02 13:48:55
【问题描述】:

我正在实现一个多米诺网络服务提供者,其目的是从 base64 格式流式传输,在使用网络服务的客户端中是一个附件文件,将其转换回文件。在用 java 开发的 web 服务提供者中,我使用 Stream 类和 Mime 类来转换流和文件。 Web 服务提供程序适用于最大为 5 MB 的文件,对于较大的文件,将显示错误 technote。有人遇到过这个问题吗?有什么办法解决吗?

这是网络服务提供者的代码

public class criaAnexo {
private Vector itemsToRecycle;
public void attachDocument( byte[] is) {

    // creating the output stream used to create the MIME attachments
    try
    {

        itemsToRecycle = new Vector(); 
        Session session = NotesFactory.createSession();
        Database db = session.getDatabase("Serverx", "base.nsf");
        if (!db.isOpen())
            System.out.println("names2.nsf does not exist on snapper");
        else
        {
            Stream outStream = session.createStream();
            outStream.write(is);


            session.setConvertMIME(false);

            // create the MIME body
            Document doc = db.createDocument();
            doc.replaceItemValue("Form", "formAttachment");
            MIMEEntity body = doc.createMIMEEntity();


            // create a child for each attachment<br/>
            MIMEEntity child = body.createChildEntity();

            // find the fileSuffix<br/>
            //String fileSuffix = files[i].substring(files[i].lastIndexOf(".")+1);
            String fileSuffix = "pdf";


            // set the child to the outstream using a mapped MIME type<br/>
            // MIME type mapping see: http://www.w3schools.com/media/media_mimeref.asp

            //child.setContentFromBytes(outStream, mapMIMEType(fileSuffix), MIMEEntity.ENC_IDENTITY_BINARY);

            child.setContentFromBytes(outStream, "application/pdf", MIMEEntity.ENC_IDENTITY_BINARY);


            // set name for file attachment<br/>
            MIMEHeader header = child.createHeader("Content-Disposition");
            header.setHeaderVal("attachment; filename=\"teste.pdf\"");

            // set unique id for file attachment to be able to refer to it<br/>
            header = child.createHeader("Content-ID");
            header.setHeaderVal("teste.pdf");

            //outStream.truncate();
            //outStream.close();
            outStream.close();
            Runtime rt = Runtime.getRuntime(); 
            long total_mem = rt.totalMemory(); 
            long free_mem = rt.freeMemory(); 
            long used_mem = total_mem - free_mem; 
            System.out.println("Total de Memória:"+total_mem); 
            System.out.println("Total de Memória livre:"+free_mem);
            System.out.println("Total de memoria usada pelo agente: " + used_mem/1048576);  


            doc.save( true, true );
            itemsToRecycle.add(doc);
            session.recycle(itemsToRecycle); //recycle all items added to vector 
            session.recycle();

        }



    }
    catch(Exception e)
    {
    }
}

}

【问题讨论】:

  • 您是否查看过 Domino 服务器的服务器文档中的“请求内容的最大大小”设置以及相应网站配置文档中的“最大 POST 数据”设置?有关说明,请参见此处:ibm.com/support/knowledgecenter/en/SSKTMJ_8.5.3/…
  • 两个参数都设置为 10 MB。

标签: web service stream lotus-domino


【解决方案1】:

由于 base64 编码和其他开销,大于 5 MB 的文件可能会超过您为请求内容的最大大小最大 POST 数据配置的 10 MB 限制> 服务器的设置。尝试增加它们。

【讨论】:

  • 我将两个参数都增加到 50 MB,但错误仍然存​​在。
  • 你重启服务器的http任务了吗?我不确定这是否需要,但可能需要。
  • 是的,我重新启动了整个 Domino。
  • 那我就没主意了。
【解决方案2】:

事实上,限制发生在使用我在 domino 本身中实现的 Web 服务的客户端中。问题描述中引用的技术说明暗示问题出在提供商方面,但实际上并非如此。当我在 dot net 上实现 Web 服务客户端时,文件流式传输没有问题。

【讨论】:

  • 只有在实现客户端消费lotusscript中的web服务时才会出现问题。在 Java 中,问题不会发生。
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2016-12-21
  • 2016-04-11
  • 2012-01-17
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多