Alfresco 的奇怪超时问题

Strange timeout issues with Alfresco

在我从 5 个文档中提取任意两个文档后,DotCMIS 调用停止响应。

我检查了 Alfresco 服务器上的日志,没有任何与失败调用相关的内容。

我已调试识别超时。

//定义CMIS可用路径,在alfresco下已经可用 参数[DotCMIS.SessionParameter.AtomPubUrl] = "https://localhost:8080/alfresco/service/cmis";

// alfresco 门户管理员用户名 参数[DotCMIS.SessionParameter.User] = "admin";

// alfresco 门户管理员密码 参数[DotCMIS.SessionParameter.Password] = "w4rth0g!";

// 定义会话工厂 SessionFactory 工厂 = SessionFactory.NewInstance();

// 使用会话工厂获取默认存储库,我们将在此存储库上执行操作并在此存储库上创建会话 ISession 会话 = factory.GetRepositories(参数)[0].CreateSession();

public ContentStream GetContentByDocumentId(string docId) { ISession会话; IObjectId id; I文档文档; IContentStream 内容流; ContentStream contentStreamModel = new ContentStream();

        try
        {
            session = GetSession();
            id = session.CreateObjectId(docId);
            doc = session.GetObject(id) as IDocument;

            // Content
            contentStream = doc.GetContentStream();

            contentStreamModel.FileName = contentStream.FileName;
            contentStreamModel.Length = contentStream.Length;
            contentStreamModel.MimeType = contentStream.MimeType;
            contentStreamModel.Stream = contentStream.Stream;

            contentStreamModel.Stream.Close();
        }
        catch (Exception ex)
        {
            throw new ApplicationException(ex.Message);
        }
        finally
        {

            session = null;
            id = null;
          //  session.Delete(id, true);
           // session.Clear();
            doc = null;
            contentStream = null;
            //contentStream.Stream.Close();
            //contentStreamModel.Stream.Close();

        }

        return contentStreamModel;
    }

我在这里关闭内容流。稍后在下面的方法中我试图遍历那个

public static void CreateMergedPdf(string targetPdfLocation, IEnumerable docStreams) { 尝试 { 使用 (FileStream stream = new FileStream(targetPdfLocation, FileMode.Create)) { var pdfDoc = new Document(PageSize.A4); PdfCopy pdf = new PdfCopy(pdfDoc, stream); pdfDoc.Open();

                foreach (var doc in docStreams)
                {
                    pdf.AddDocument(new PdfReader(doc));
                }

                pdfDoc.Close();
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException(ex.Message);
        }
    }

我已将关闭连接移动到我在这里使用的方法。

// 按照orderNo字段的顺序合并文档。 var docStreams = new List(); //var docStreams2 = new List();

        **foreach (string docId in orderedDocIds)
        {
            // Retreive doc from Alfresco.
            var doc = GetContentByDocumentId(docId);
            docStreams.Add(doc.Stream);
            doc.Stream.Close();
        }**

       // docStreams.CopyTo(docStreams2.ToArray());



        // Created a merged pdf and drops in a temp folder.
        FileHelper.CreateMergedPdf(mergedPdfFileLocation, docStreams2);

        return mergedPdfFileLocation;

在这里我将无法访问关闭stream.Is有什么办法可以重新打开?

第三次调用 createsession() 时出现超时错误。

您是否使用并关闭了文档内容流? .Net 只允许每个服务器有两个并发连接。如果您不关闭流,拖车连接将用完并且 .Net 会阻塞,直到它们被关闭。

另请参阅:https://issues.apache.org/jira/browse/CMIS-559