ホストされている 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();