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 会阻塞,直到它们被关闭。
在我从 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 会阻塞,直到它们被关闭。