непрерывный поток на сервере IIS - произойдет ли сбой, и как мне лучше всего выполнить этот код? - PullRequest
1 голос
/ 21 февраля 2011

В настоящее время я разрабатываю потоковое веб-приложение для Twitter в рамках проекта College. Я написал код, который использует curl для потоковой передачи из твиттера и записывает данные в экспресс-базу данных sql server 2008.

    ProcessStartInfo curl = new ProcessStartInfo();
    Process process = new Process();

    protected void Page_Load(object sender, EventArgs e)
    {
        curl.FileName = @"c:\program files\Curl\curl.exe";
        curl.Arguments = "http://stream.twitter.com/1/statuses/sample.json -u username:password";
        curl.UseShellExecute = false;
        curl.RedirectStandardOutput = true;

        process = Process.Start(curl);
        Twitter_Stream(sender, e);
    }
    protected void Twitter_Stream(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection();

        // Start curl process
        using (process)
        {
            using (StreamReader reader = process.StandardOutput)
            {
                try
                {
                    // create connection and open connection
                    conn = new SqlConnection(ConfigurationManager.AppSettings["strConnectionString"].ToString());
                    conn.Open();
                    // Post the output from curl to the queue.
                    // One line = one tweet in json format.
                    while (!reader.EndOfStream)
                    {
                        // create a SqlCommand object for this connection
                        SqlCommand command = conn.CreateCommand();
                        command.CommandText = "save_stream";

                        string result = reader.ReadLine();
                        Message message = new Message(result);

                        JObject obj = JObject.Parse(message.Body.ToString());

                        /* I parse the obj here and exec query to save data
                        command.CommandType = CommandType.StoredProcedure;
                        command.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                { /*DO some error logging here.*/}

                finally
                {
                    // close the connection
                    conn.Close();
                    Thread.Sleep(1000);
                    Twitter_Stream(sender, e);
                }
            }
        }
    }`

Мой вопрос таков: поскольку я поместил цикл while, который будет или никогда не должен заканчиваться в моем коде, это вызовет проблему при загрузке сервера. Будет ли непрерывный цикл сбой сервера? И что я должен использовать вместо этого? Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 21 февраля 2011

Нет, это не приведет к сбою сервера, поскольку IIS уже отслеживает этот случай. Если время выполнения страницы превышает пороговое значение текущего значения, IIS прервет поток.

Вместо того, чтобы делать это веб-страницей, вы должны сделать это консольным приложением. Вы можете использовать бесконечные циклы столько, сколько хотите в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...