2016-09-07 3 views
0

DotCMIS вызывает прекращение ответа после того, как я вытащил из двух документов два документа.Странные проблемы с тайм-аутом с Alfresco

Я проверил журналы на сервере Alfresco и ничего не связано с неудачными вызовами.

Я отлаживал идентификатор таймаута.

// определить доступный путь CMIS, который уже доступен под параметрами alfresco [DotCMIS.SessionParameter.AtomPubUrl] = "https://localhost:8080/alfresco/service/cmis";

// alfresco portal admin имя пользователя параметры [DotCMIS.SessionParameter.User] = "admin";

// alfresco portal admin пароль параметры [DotCMIS.SessionParameter.Password] = "w4rth0g!";

// определить сессионную фабрику SessionFactory factory = SessionFactory.NewInstance();

// с помощью сеанса завод получить хранилище по умолчанию, на этом хранилище мы будем выполнять действия & создать сеанс на этом хранилище ISession сессии = factory.GetRepositories (параметры) [0] .CreateSession();

Публичный ContentStream GetContentByDocumentId (строка docId) { ISession session; IObjectId id; Документ IDocument; IContentStream contentStream; ContentStream contentStreamModel = новый 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; 
    } 

Здесь я закрываю поток контенетов. Позже в приведенном ниже методе я пытаюсь Переберите, что

государственной статической силы CreateMergedPdf (строка targetPdfLocation, IEnumerable docStreams) { попробовать { используя (FileStream поток = новый FileStream (targetPdfLocation, FileMode.Create)) { var pdfDoc = новый документ (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); 
     } 
    } 

Я переместил закрывающее соединение к методу, где я потребляю здесь.

// Объединить документы в порядке очередиНо поле. 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; 

Здесь я получу доступ к закрытому потоку. Есть ли способ открыть его снова?

В третий раз, когда вызываемое имя creationession() вызывает тайм-аут.

+0

Просто откройте одну сессию и использовать его. Открытие сеанса для каждого документа не требуется. –

ответ

1

Вы потребляли и закрывали потоки содержимого документа? .Net разрешает только два одновременных подключения на сервер. Если вы не закрываете потоки, буксирные соединения используются, а .Net блокируется до тех пор, пока они не будут закрыты.

Смотрите также: https://issues.apache.org/jira/browse/CMIS-559

+0

Да, я попытался закрыть поток контенетов. Тайм-аут сеанса теперь произойдет, если я закрою. Я передаю добавленный документ другому методу и читаю поток контенетов. Здесь я получаю доступ к закрытому потоку errro connot. – coder

+0

Есть ли способ открыть снова? Я обновил свой вопрос с использованием кода. Здесь на \t \t \t \t \t Еогеасп (вар док в docStreams) \t \t \t \t \t { \t \t \t \t \t \t pdf.AddDocument (новый PdfReader (док)); \t \t \t \t \t} Я получу ошибку в этом болке «Не могу получить доступ к закрытому потоку». – coder

+0

Вы должны потреблять поток. Простого закрытия недостаточно. Откройте поток, когда вам нужно, а не раньше. Вы можете получить все метаданные потока (имя, длина, размер) через свойства документа. Или ... увеличить значение DefaultConnectionLimit. –