5 つのドキュメントから 2 つのドキュメントをフェッチした後、DotCMIS 呼び出しが応答を停止します。
Alfresco サーバーのログを確認しましたが、失敗した呼び出しに関連するものは何もありません。
timeout を特定するためにデバッグしました。
// alfresco parameters[DotCMIS.SessionParameter.AtomPubUrl] = " https://localhost:8080/alfresco/service/cmis ";の下で既に利用可能な CMIS 利用可能なパスを定義します。
// alfresco ポータルの管理者ユーザー名 parameters[DotCMIS.SessionParameter.User] = "admin";
// alfresco ポータル管理者パスワード parameters[DotCMIS.SessionParameter.Password] = "w4rth0g!";
// セッション ファクトリを定義する SessionFactory factory = SessionFactory.NewInstance();
// セッション ファクトリを使用してデフォルト リポジトリを取得します。このリポジトリでアクションを実行し、このリポジトリでセッションを作成します ISession session = factory.GetRepositories(parameters)[0].CreateSession();
public ContentStream GetContentByDocumentId(string docId) { ISession セッション; IObjectId id; IDocument ドキュメント; IContentStream contentStream; 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 = new 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;
ここで、閉じたストリームにアクセスできません。再開する方法はありますか?
3 回目に、createsession() が呼び出されると、タイムアウト エラーが発生します。