2014-10-09 3 views
0

호스트 된 Solr 인덱스에서 프로세스를 시작하기 위해 http url을 실행해야하는 C# 콘솔 응용 프로그램을 만들고 있습니다. 내가 발사 오전 URL이이 같은 HttpWebRequest를 생성을위한 System.Net.WebRequest 클래스를 사용하고Wierd C# 콘솔 응용 프로그램에서 HTTPWebRequest를 만드는 동안 오류가 발생했습니다.

http://ServerName:8888/solr/people-dev/dataimport?command=full-import&clean=true 

입니다 :

public string Execute(string url) 
    {     
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
     request.Method = "GET"; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream strm = response.GetResponseStream(); 
     string res = String.Empty; 
     using (StreamReader reader = new StreamReader(strm)) 
     { 
      res = reader.ReadToEnd(); 
     } 
     return res;       
    } 
내가 같이 URL보다 전달하여이 함수를 호출 할 때마다

아니, 매개 변수, 내 컨트롤이 첫 번째 줄에 도달하자마자 요청을 만들고 1-2 초 동안 기다린 다음 실행중인 응용 프로그램 인스턴스를 종료하려고합니다.

. NET Framework 4.0과 함께 VS2010을 사용할 때 .NET Framework와 관련이 있는지 알 수 없습니다. 도움을 찾고 ..

질문에 덧붙여,이 함수는 상위 작업 내에서 생성 된 하위 작업 내에서 호출됩니다.

자식 작업이 완전히 실행되기 전에 부모 작업이 만료 될 수 있습니까? 그렇다면 어떻게되는지 확인하는 방법 ...

Task parentImportTask = new Task(() => { 

    TaskFactory tf = new TaskFactory(TaskCreationOptions.AttachedToParent, 
     TaskContinuationOptions.ExecuteSynchronously); 

    Task<bool> dataDumpTask = tf.StartNew<bool>(() => 
    { 

     string sqlQuery = @"[dbo].[ImportKonnectPeopleDataForIndexing]"; 

     using (SqlConnection connection = DBConnection.getSqlConnection("KonnectDataDumpDB")) 
     { 
      int importStatus = -1; 

      try 
      { 
       SqlCommand command = new SqlCommand(sqlQuery, connection); 
       command.CommandType = System.Data.CommandType.StoredProcedure; 
       command.CommandTimeout = 900; 
       importStatus = command.ExecuteNonQuery(); 
      } 
      catch (Exception e) 
      { 
       Logger.log("Exception occured in data import task Solr/People::Index"); 
       throw e; 
      } 
      finally 
      { connection.Close(); } 

      if (importStatus > 0) 
      { return true; } 
      return false; 
     } 
    }, TaskCreationOptions.AttachedToParent).ContinueWith((i) => 
    { 
     if (!i.Result) 
     { throw new Exception("Data Dump task not successfull Solr/People::Index"); } 

     return solrConnector.Execute(url); 

    }, TaskContinuationOptions.OnlyOnRanToCompletion);      

}, TaskCreationOptions.LongRunning); 

parentImportTask.RunSynchronously(); 
parentImportTask.Wait(); 
+0

httpwebRequest를 시도하는 URL이 제대로 작동하는지 확인해주십시오. URL에 액세스 할 수없는 경우 HttlWebrequest.Create (url) 예외가 발생합니다. – jadavparesh06

+0

예. 그것은 잘 작동합니다 .. 그건 그렇고, 코드는 심지어 예외를 throw하지 않습니다. –

+0

나는 Execute() 루틴 주위에 try catch 블록을 사용해야한다고 제안한다. – jadavparesh06

답변

0

응용 프로그램에 이상이없는 것 같습니다. 모든 일이 끝나면 콘솔 애플리케이션이 닫힙니다. Console.ReadKey()를 응용 프로그램 끝에 추가하면 닫기 버튼을 누를 때까지 기다립니다.

관련 문제