0

ホストされている Solr インデックスでプロセスを開始するために http URL を起動する必要がある C# コンソール アプリケーションを作成しています。私が発射しているURLは

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

次のような HTTPWebRequest を作成するために System.Net.WebRequest クラスを使用しています。

    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 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();
4

1 に答える 1

0

アプリケーションに問題はないようです。すべてが完了するとすぐに、コンソール アプリケーションが閉じます。Console.ReadKey() をアプリケーションの最後に追加すると、ボタンを押して閉じるまで待機します。

于 2014-10-09T10:11:33.293 に答える