2016-11-28 4 views
0

웹 응용 프로그램에서 콘텐츠 쿼리를 사용하려고하지만 "Lucene.Net.Store.AlreadyClosedException :이 IndexReader가 닫혔습니다."예외가 발생합니다. 이 문제를 해결할 수 있도록 도와주세요.웹 응용 프로그램에서 콘텐츠 쿼리를 사용하는 감지/그물

var startSettings = new RepositoryStartSettings 
     { 
      Console = Console.Out, 
      StartLuceneManager = true, // <-- this is necessary 
      IsWebContext = false, 
      PluginsPath = AppDomain.CurrentDomain.BaseDirectory, 
     }; 

     using (Repository.Start(startSettings)) 
     { 
      var resultQuery = ContentQuery.Query("+InTree:@0 + DisplayName:*@1*", null, folderPath, q); 

     } 
+0

우리는 문제를 재현 할 수 있습니다, 당신은 우리에게 당신이 사용하고있는 SN 버전을 알려 주시기 바랍니다 수 있습니까? 아니면 어떻게 든 앱 전체를 공유 할 수 있습니까? –

+0

부수적 인 질문 : 자체 색인이있는 무거운 도구가 정말로 필요한가요? 가능한 경우 SN 도구를 작성하는 데 권장되는 방법 인 REST API를 통해 포털에 연결하는 Sense/Net Client 라이브러리를 사용할 수 있기 때문입니다. 그것은 여전히 ​​당신이 작성한 C# 코드이며, 그런 도구를 유지하는 것이 더 간단합니다. –

+0

SN 버전 6.5.3을 사용하고 있습니다. REST API를 통해 Sense/Net 클라이언트를 이미 사용했지만 해당 메소드를 사용하여 검색 기능을 구현할 수 없습니다. 그래서 ContentQuery를 사용하여 트리의 내용을 검색해야합니다. – dinhienhy

답변

0

다른 애플리케이션 (앱 도메인)에서 Sense/Net에 연결하는 권장 방법은 REST API를 사용하는 것입니다. 유지 보수가 훨씬 쉬우 며 구성이 덜 필요합니다 (유일한 예외는 Sense/Net 응용 프로그램 자체에서 작업하는 경우 또는 단일 응용 프로그램 만 있고 어느 곳에서나 Sense/Net에 액세스하지 않으려는 경우입니다. Sense/Net의 로컬 색인과 필요한 모든 설정 값 등을 기꺼이 다룰 수 있습니다.

REST API를 통해 연결한다고해서 수동으로 HTTP 요청을 보내야 할 필요는 없습니다. (복잡하지는 않지만) .Net 클라이언트 라이브러리이 있습니다. https://www.nuget.org/packages/SenseNet.Client

  • 소스 및 예 : https://github.com/SenseNet/sn-client-dotnet
  • 당신은, 당신은 설치 등

    // loading a content 
    dynamic content = await Content.LoadAsync(id); 
    DateTime date = content.BirthDate; 
    
    // querying 
    var results = await Content.QueryAsync(queryText); 
    
    • , 권한 관리, 파일, 쿼리 콘텐츠를 업로드 할 수있는 클라이언트를 통해 모든 콘텐츠 메타 데이터 또는 바이너리에 액세스 할 수 있습니다

      웹 응용 프로그램에서 사용하려면 다음을 수행해야합니다.

      • 은 응용 프로그램 수명주기의 시작 부분에서 클라이언트 컨텍스트를 한 번 초기화합니다 (예 : 응용 프로그램 시작)
      • (예 : 그녀가 액세스 할 수있는 문서를 쿼리하기 때문에) 현재 로그인 한 사용자의 이름으로 Sense/Net에 요청해야하는 경우 새로운 ServerContext 개체를 만들어야합니다. 해당 사용자의 사용자 이름/비밀번호를 가진 모든 사용자에 대해, 그리고이 객체를 모든 클라이언트 호출에 제공하십시오 (예 : 컨텐츠 메소드로드 또는 저장).
      var sc = new ServerContext 
      { 
          Url = "http://example.com", 
          Username = "user1", 
          Password = "asdf" 
      }; 
      
      var content = await Content.LoadAsync(id, sc);