0

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() が呼び出されると、タイムアウト エラーが発生します。

4

1 に答える 1