1

毎秒1回RabbitMQエクスチェンジにメッセージを送信する単純なC#アプリケーションがあります。インターネット接続が切断されると、アプリがクラッシュします。そこで、Try / Catchステートメントを追加しましたが、クラッシュしなくなりました。ただし、接続が復元されると、データは送信されなくなります。アプリを閉じて、再度開く必要があります。私はこれを正しく行っていますか?

   private void rabbitmqxmit()
    {
        try
        {
            while (rmqtxrun == true)
            {

                ConnectionFactory factory = new ConnectionFactory();
                factory.HostName = textBox3.Text;
                using (IConnection connection = factory.CreateConnection())
                using (IModel channel = connection.CreateModel())
                {


                    button1.BackColor = Color.Green;

                    string message = textBox1.Text;
                    byte[] body = System.Text.Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(textboxExchange.Text, textboxKey.Text, null, body);

                    txtboxTransmitting.Text = message;
                    button1.BackColor = Color.Gray;

                    Thread.Sleep(Convert.ToInt32(textBox4.Text));

                }


            }
        }
        catch {}
    }
4

2 に答える 2

4

例外が発生すると、ループを効果的に終了します。やりたいことを取得するには、try/catchをwhileループ内に移動する必要があります。

ただし、例外を予期するのではなく、接続をテストする方法を見つけた方がクリーンです。例外を取得してダンプするだけで、他の問題が発生する可能性があることを確認できなくなります。最低限、発生が予想される例外のみをキャッチして、どこかに記録しようと思います。

于 2013-03-23T21:36:41.223 に答える
0

おそらくチャネルを再初期化する必要があります-それを試してください。using句があるため、接続とチャネルは適切に破棄されます。ConnectionFactoryがIDisposableも実装している場合は、using句でも作成します。

また、すべての例外をキャッチし、それらに対して何もしないことは非常に悪いアプローチです。より良いアプローチは、接続例外だけをキャッチすることです。

于 2013-03-23T21:17:15.387 に答える