在我从 5 个文档中提取任意两个文档后,DotCMIS 调用停止响应。
我检查了 Alfresco 服务器上的日志,并没有与失败的调用相关的任何内容。
我已经调试以确定超时。
// 定义 alfresco 参数下已经存在的 CMIS 可用路径[DotCMIS.SessionParameter.AtomPubUrl] = " https://localhost:8080/alfresco/service/cmis ";
// alfresco 门户管理员用户名参数[DotCMIS.SessionParameter.User] = "admin";
// 露天门户管理员密码参数[DotCMIS.SessionParameter.Password] = "w4rth0g!";
// 定义会话工厂 SessionFactory factory = SessionFactory.NewInstance();
// 使用会话工厂获取默认存储库,在此存储库上我们将执行操作并在此存储库上创建会话 ISession session = factory.GetRepositories(parameters)[0].CreateSession();
公共 ContentStream GetContentByDocumentId(string docId) { ISession session; IObjectId 标识;IDocument 文档;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) { try { using (FileStream stream = new FileStream(targetPdfLocation, FileMode.Create)) { var pdfDoc = new Document(PageSize.A4); PdfCopy pdf = 新 PdfCopy(pdfDoc, 流); 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;
在这里我将无法访问已关闭的流。有没有办法重新打开?
在第三次调用 createsession() 时,它会给出超时错误。